2

Xlib で作成したウィンドウの 1 つに背景画像を設定しようとしています。画像はJPEGかPNGでお願いします。DevIL をダウンロードしました (多くのフォーマットをサポートしているため、これを使用することを好みます)。

それで、私の質問は、どうすればいいですか?特定のチュートリアルやヘルプが見つかりません。
DevIL を使用してイメージをストリームにロードする方法は理解していますが、それをウィンドウに配置するにはどうすればよいですか? 私はここで答えを見つけました: Load image on a window using xlib but I don't know how and which function should receive the image bytes. 私も理解しているように、すべての画像を保持し、XPutImage で使用する XImage が必要です。私が理解していないのは、画像のバイトを DevIL から XImage に送信する方法です。

誰かが役立つページを知っているか、どうすればよいかについての手がかりを知っていますか?
ありがとう!

4

1 に答える 1

2

を作成するために使用される Xlib 関数XImageXCreateImageであり、その使用法は次のようになります (リンクで完全な説明を読むことができます)。

XImage *XCreateImage(display, visual, depth, format, offset, data, 
                    width, height, bitmap_pad, bytes_per_line)

ここで、特定の質問に関連する引数はdataになりchar*ます。これは、DevIL で読み込まれた画像データを保持する場所を指します。これにより、既に見つけた他の回答の手順に従うことができるはずです。

追加するために編集:

XCreateImage が理解できるように、画像データをフォーマットする方法を DevIL に指示する必要があります。たとえば、次の関数呼び出しのペアは、正しく表示される XImage を作成します。

ilCopyPixels(
    0, 0, 0, 
    image_width, image_height, 1, 
    IL_BGRA, IL_UNSIGNED_BYTE, 
    image_data
);

// ...

XImage* background = XCreateImage(
    display,
    XDefaultVisual(display, XDefaultScreen(display)), 
    XDefaultDepth(display, XDefaultScreen(display)),
    ZPixmap,
    0,
    image_data,
    image_width,
    image_height,
    32,
    0
);

、代わりに を選択IL_RGBAすると、色がオフになります!

于 2012-09-18T11:33:27.420 に答える