Вы, вероятно, обнаружили это в какой-то момент с 2008 года, но для будущих читателей ...
XCreatePixmapFromBitmapData () загрузит литеральные данные растрового изображения (то есть 1-битный, черно-белый) в растровое изображение. Скорее всего, это не то, что вам нужно, если целью является загрузка из PNG.
Более новый способ сделать это - использовать Cairo или GdkPixbuf. Старые школьные API-интерфейсы Xlib, такие как XCreatePixmapFromBitmapData () и XDrawWhwhat (), все в значительной степени устарели (не то, что они будут фактически удалены когда-либо, но они устарели и не синхронизированы с тем, как работают современные приложения).
То, как люди обычно рекомендуют делать вещи в эти дни:
- предпочитают libxcb libX11, libxcb - это просто очень тонкая оболочка для протокола X, в которой отсутствуют вызовы, которые выполняют несколько запросов протокола X (например, CreatePixmapFromBitmapData выполняет CreatePixmap, CreateGC, PutImage, FreeGC)
- предпочитают cairo (или аналогичную библиотеку, Skia одна) API-интерфейсам рисования на стороне сервера
Вы можете использовать cairo_image_surface_create_from_png () для простых целей или GdkPixbuf, если вам нужно поддерживать больше форматов и т. Д.