PNG 画像をメモリにロードし、そこから libpng を使用して生のピクセル データを取得できます。また、XCB またはプレーン X11 を使用して背景が空白のウィンドウを作成することもできます。
ウィンドウ内に画像を表示するには、次に何をすればよいですか?
XLib メソッドは次のとおりです。
XImage
ビジュアルに適した奥行きのある構造を作成するXPutImage
XPutPixel
2 番目のステップは、個々のピクセルごとに呼び出すことで実現できます。RGB 値をピクセル値に変換する必要があります。15、16、24、または 32 ビットのビジュアルの場合、これはビットマスクを使用した簡単な操作です (visual->red_mask
赤のコンポーネントを配置する場所などを決定するために使用します)。8 ビット深度をサポートしたい場合は、ディザリングを使用し、適切なカラーマップ (おそらく 216 要素のカラー キューブ) を割り当てて使用する必要があります。幸いなことに、最近では 8 ビットのみのハードウェアはほとんどありません。
呼び出しXPutPixel
が遅すぎる場合は、その動作をインラインで実装する必要があります。たとえば、このソースをガイダンスとして使用してください。
xcb には、XImage と同等の機能を持つ xcb-util-image というライブラリがあります。私はそれに慣れていません。