画像など

Pixmap
XCreatePixmapPixmap 作成
XFreePixmapPixmap 削除
カーソル
XFreeCursorカーソルを削除
XCreateFontCursor標準カーソルから作成
XCreateGlyphCursorフォントグリフからカーソルを作成
XCreatePixmapCursorPixmap からカーソルを作成
XQueryBestCursor表示可能な最大カーソルサイズを返す
XRecolorCursorカーソルの色を変更
XImage
struct XImageXImage 構造体
XInitImageXImage の操作関数をセット
XCreateImageXImage 構造体を作成
XDestroyImageXImage を解放
XGetPixelピクセルを取得
XPutPixelピクセルをセット
XSubImageイメージの指定範囲から XImage を作成
XAddPixelすべてのピクセルに定数値を加算
XPutImageXImage のイメージを書き込み
XGetImage範囲内のイメージを取得
XGetSubImageXImage 内の指定位置にイメージを取得する
Bitmap
X11 ビットマップファイルX11 ビットマップファイル
XReadBitmapFileビットマップファイルから Pixmap に読み込み
XReadBitmapFileDataビットマップファイルを読み込んでデータを返す
XWriteBitmapFilePixmap からファイルに書き込み
XCreatePixmapFromBitmapDataビットマップデータを Pixmap に転送して返す
XCreateBitmapFromDataビットマップデータから Pixmap を作成
Pixmap
Pixmap XCreatePixmap(Display *display, Drawable d, unsigned int width, unsigned int height, unsigned int depth);
Pixmap を作成して ID を返します。

InputOnly ウィンドウを d に渡すことは有効です。
width,height はゼロ以外である必要があります。そうでない場合は、BadValue エラーが発生します。
depth 引数は、指定されたドローアブルのスクリーンでサポートされている深さの 1 つである必要があります。そうでない場合は、BadValue エラーが発生します。

サーバーは、指定されたドローアブルを使用して、どのスクリーンに Pixmap を作成するかを決定します。
Pixmap は、このスクリーンでのみ、また、同じ深さの他のドローアブルでのみ使用できます (このルールの例外については、XCopyPlane を参照)。
Pixmap の初期内容は未定義です。
XFreePixmap(Display *display, Pixmap pixmap);
Pixmap ID とピクスマップの間の関連付けを削除し、それ以上参照がない場合、ピクスマップストレージを解放します。
ピクスマップは二度と参照しないでください。
カーソル
XFreeCursor(Display *display, Cursor cursor);
カーソル リソース ID と、指定されたカーソルの間の関連付けを削除します。
カーソルストレージは、他のリソースからの参照がない場合、解放されます。
指定したカーソルIDは再度参照しないでください。
Cursor XCreateFontCursor(Display *display, unsigned int shape);
X は、cursor という名前の特別なフォントで、標準カーソル形状のセットを提供します。

ホットスポットは、カーソルフォントに格納されている情報から取得されます。
カーソルの初期色は、前景色が黒、背景が白です (XRecolorCursor を参照)。
shape
<X11/cursorfont.h> で定義されている形状
Cursor XCreateGlyphCursor(Display *display, Font source_font, Font mask_font, unsigned int source_char,
    unsigned int mask_char, XColor *foreground_color, XColor *background_color);
ソースビットマップとマスクビットマップが指定されたフォントグリフから、カーソルを作成する。

mask_font と mask_char はオプションです。
source_char および mask_char (定義されている場合) のグリフの原点は同時に配置され、ホットスポットを定義します。
source_char と mask_char は同じバウンディング ボックス メトリックを持つ必要はなく、バウンディング ボックスに対するホットスポットの配置に制限はありません。
フォントへの明示的な参照を行わない場合は、XFreeFont を呼び出すことで、フォントをすぐに解放できます。

2 バイトのマトリックス フォントの場合、16 ビット値は、最上位バイトの byte1 メンバーと最下位バイトの byte2 メンバーで形成される必要があります。
source_font
ソースフォント
mask_font
マスクフォント or None
source_char
ソースの文字グリフ。
source_font で定義されたグリフである必要があります。そうでない場合は、BadValue エラーが発生します。
mask_char
マスクの文字グリフ。
mask_font で定義されたグリフである必要があります。そうでない場合は、BadValue エラーが発生します。
指定されていない場合は、ソースのすべてのピクセルが表示されます。
foreground_color
前景色
background_color
背景色
Cursor XCreatePixmapCursor(Display *display, Pixmap source, Pixmap mask,
    XColor *foreground_color, XColor *background_color, unsigned int x, unsigned int y);
Pixmap からカーソルを作成する。

StaticGray または GrayScale のカラーしかない場合でも、前景色と背景の RGB 値は、foreground_color と background_color を使用して指定する必要があります。
前景色はソース内で 1 に設定されたピクセルに使用され、背景色は 0 に設定されたピクセルに使用されます。
指定されている場合、source と mask の深さは 1 でなければなりません (または BadMatch エラーが発生します)。

カーソルの色は、カラーの表示制限に合わせて任意に変換できます。
ピクスマップへの明示的な参照が行われない場合は、ピクスマップをすぐに解放できます。

source または mask の Pixmap 内での後続の描画は、カーソルに未定義の影響を与えます。
X サーバーはピクスマップのコピーを作成する場合もあれば、作成しない場合もあります。
mask
カーソルの形状を定義します。
マスク内で 1 に設定されたピクセルは表示され、0 に設定されたピクセルは表示されません。
マスクが指定されていない場合は、ソースのすべてのピクセルが表示されます。
マスクが存在する場合は、source で定義されたピクスマップと同じサイズでなければなりません。そうしないと、BadMatch エラーが発生します。
x,y
ホットスポット位置。
ソース内の位置である必要があり、そうでない場合は BadMatch エラーが発生します。
Status XQueryBestCursor(Display *display, Drawable d, unsigned int width, unsigned int height,
    unsigned int *width_return, unsigned int *height_return);
一部のディスプレイでは、他のディスプレイよりも大きなカーソルを使用できます。
ディスプレイ上で実際にどのくらいのサイズのカーソルが可能かを調べることができます。
表示可能な最大サイズを返します。
アプリケーションは、大きなカーソルをサポートできないディスプレイ上で、小さなカーソルを使用できるように準備する必要があります。
width,height
使用したいサイズ
width_return,height_return
指定された幅と高さに最も近い、最適な幅と高さを返します。
XRecolorCursor(Display *display, Cursor cursor, XColor *foreground_color, XColor *background_color);
指定されたカーソルの色を変更します。
カーソルが画面上に表示されている場合、変更はすぐに表示されます。
XColor 構造体の pixel メンバーは無視されます。RGB 値のみが使用されます。
XImage
typedef struct _XImage {
 int width, height;
 int xoffset;               /* X方向の先頭で無視するピクセル数 */
 int format;                /* XYBitmap, XYPixmap, ZPixmap */
 char *data;                /* イメージバッファ */
 int byte_order;            /* バイトオーダー: LSBFirst, MSBFirst */
 int bitmap_unit;           /* 8, 16, 32 */
 int bitmap_bit_order;      /* ビットオーダー: LSBFirst, MSBFirst */
 int bitmap_pad;            /* 8, 16, 32 */
 int depth;                 /* 深さ */
 int bytes_per_line;        /* スキャンラインのバイト数 */
 int bits_per_pixel;        /* バッファ上の1pxあたりのビット数 (ZPixmap) */
 unsigned long red_mask;    /* R,G,B のビットマスク */
 unsigned long green_mask;
 unsigned long blue_mask;
 XPointer obdata;
 struct funcs {             /* 画像操作関数 */
      struct _XImage *(*create_image)();
      int             (*destroy_image)();
      unsigned long   (*get_pixel)();
      int             (*put_pixel)();
      struct _XImage  *(*sub_image)();
      int            (*add_pixel)();
 } f;
} XImage;
XImage 構造体
bitmap_unit
(XYBitmap) 1bit を詰める整数のビット数
bitmap_pad
スキャンラインのビット単位 (8,16,32)
depth
実際に色として使われるビット数
bits_per_pixel
(ZPixmap) バッファ上の1pxあたりのビット数。
1, 4, 8, 16, 24, 32bit
Status XInitImage(XImage *image);
構造体のメンバーの値に基づいて、XImage の操作関数を初期化します。
操作関数以外のフィールドは、すべて初期化されている必要があります。

bytes_per_line が 0 の場合、イメージデータがメモリ内で連続していると想定して、他のメンバーに基づいて適切な値に設定します。それ以外の場合、bytes_per_line の値は変更されません。

Xlib によって作成または返される XImage 構造体は、この方法で初期化する必要はありません。
戻り値
成功した場合、ゼロ以外を返します。
構造内にエラーまたは不一致が検出された場合は 0 を返します。その場合、イメージは変更されません。
XImage *XCreateImage(Display *display, Visual *visual, unsigned int depth, int format, int offset,
    char *data, unsigned int width, unsigned int height, int bitmap_pad, int bytes_per_line);
XImage 構造を確保して値を設定しますが、イメージバッファ自体は確保しません。

byte_order, bitmap_unit, bitmap_bit_order は、display から設定されます。
{red,green,blue}_mask は、visual から設定されます。

イメージが XCreateImage、XGetImage、XSubImage を使用して作成される場合、XDestroyImage 関数が呼び出す destroy プロシージャによって、XImage と XImage.data の両方が解放されることに注意してください。
visual
NULL の場合、マスク値は 0 になる
format
XYBitmap, XYPixmap, ZPixmap
offset
スキャンラインの先頭で無視するピクセル数
data
イメージバッファ。
構造体に値がセットされるだけなので、NULL を指定して XImage を作成した後、XImage の値を使って確保した方が良い。
bitmap_pad
スキャンラインのビット単位 (8, 16, 32) を指定します。
bytes_per_line
1つのスキャンラインの開始から、次のスキャンラインの開始までの間の、イメージ内のバイト数を指定します。
0 で、スキャンラインがメモリ内で連続しているとみなして計算します。
XDestroyImage(XImage *ximage);
XImage 構造に関連付けられたメモリを解放します。

イメージが XCreateImage、XGetImage、XSubImage を使用して作成される場合、このマクロが呼び出す destroy プロシージャによって、イメージ構造とイメージ構造が指すデータの両方が解放されることに注意してください。
unsigned long XGetPixel(XImage *ximage, int x, int y);
XImage から、指定された位置のピクセル値を返します。
ピクセル値は正規化された形式で返されます (つまり、long の最下位バイトがピクセルの最下位バイトになります)。
x,y は画像内の位置である必要があります。
XPutPixel(XImage *ximage, int x, int y, unsigned long pixel);
XImage 内のピクセルを指定されたピクセル値で上書きします。
入力ピクセル値は正規化された形式である必要があります (つまり、long の最下位バイトがピクセルの最下位バイトになります)。
x,y は画像内の位置である必要があります。
XImage *XSubImage(XImage *ximage, int x, int y, unsigned int subimage_width, unsigned int subimage_height);
XImage の矩形範囲から、新しい XImage を作成する。
新しい XImage 構造に必要なメモリを割り当て、新しいイメージへのポインタを返します。
x、y、subimage_width、subimage_height は、イメージ内の範囲である必要があります。
XAddPixel(XImage *ximage, long value);
イメージ内のすべてのピクセルに、定数値を加算します。
これは、カラーリソースの割り当てから基本ピクセル値を取得し、画像をその形式に操作する必要がある場合に便利です。
XPutImage(Display *display, Drawable d, GC gc, XImage *image, int src_x, int src_y,
    int dest_x, int dest_y, unsigned int width, unsigned int height);
XImage の指定範囲を、ドローアブルに書き込みます。

XYBitmap 形式を使用する場合、画像の深度は 1 でなければなりません。そうでない場合は、BadMatch エラーが発生します。
GC の前景ピクセルは画像内の 1 ビットのソースを定義し、背景ピクセルは 0 ビットのソースを定義します。

XYPixmap および ZPixmap の場合、イメージの深度はドローアブルの深さと一致する必要があり、そうでない場合は BadMatch エラーが発生します。

画像の特性 (byte_order や bitmap_unit) がサーバーの要求と異なる場合、XPutImage は自動的に適切な変換を行います。

[function, plane-mask, subwindow-mode, clip-x-origin, clip-y-origin, clip-mask]
XImage *XGetImage(Display *display, Drawable d, int x, int y,
    unsigned int width, unsigned int height, unsigned long plane_mask, int format);
指定した形式で、ドローアブルの指定した四角形の内容をコピーし、XImage を返します。
この関数は、plane_mask の値の範囲チェックを実行せず、無関係なビットを無視します。

イメージの深さを XImage 構造体の depth メンバーに返します。
イメージの深さは、XYPixmap 形式でプレーンのサブセットを取得する場合を除き、ドローアブルの作成時に指定されたとおりになります。
深さは、plane_mask で 1 に設定されたビット数によって指定されます。

ドローアブルがピクスマップの場合、指定された四角形はピクスマップ内の範囲である必要があります。そうでない場合は、BadMatch エラーが発生します。

ドローアブルがウィンドウの場合、ウィンドウは表示可能でなければならず、また、ウィンドウの下位や重なりがない場合、ウィンドウの指定された矩形は、画面上に完全に表示され、ウィンドウの外縁に完全に含まれなければならない。そうでない場合は、BadMatch エラーが発生する。
ウィンドウの境界は、この要求に含まれ、読み取ることができることに注意する。
ウィンドウにバッキングストアがある場合、バッキングストアの内容は、非下位ウィンドウによって隠されているウィンドウの領域に対して返される。
ウィンドウがバッキングストアを持たない場合、そのような隠された領域の返されるコンテンツは未定義である。
また、指定されたウィンドウの深さとは異なる深さの、下位ウィンドウの可視領域の内容も未定義である。
また、ポインタカーソルの画像は返されない。
format
XYPixmap の場合、イメージには、plane_mask 引数に渡したビットプレーンのみが含まれます。
plane_mask が表示面のサブセットのみを要求する場合、返されるイメージの深度は要求されたプレーンの数になります。

ZPixmap の場合、plane_mask で指定されていないすべてのプレーンのビットはゼロとして返します。
戻り値
NULL で失敗。
XImage *XGetSubImage(Display *display, Drawable d, int x, int y, unsigned int width, unsigned int height,
    unsigned long plane_mask, int format, XImage *dest_image, int dest_x, int dest_y);
XImage 内の指定位置に、ドローアブルのイメージを取得する。

dest_image の深さは、ドローアブルの深さと同じである必要があります。
指定されたサブイメージが dest_image 上の指定された位置に収まらない場合は、右端と下端が切り取られます。
戻り値
NULL で失敗。dest_image と同じポインタを返す。
Bitmap
X11 ビットマップファイル
拡張子は .xbm。

#define <name>_width WIDTH
#define <name>_height HEIGHT
#define <name>_x_hot X
#define <name>_y_hot Y
static unsigned char <name>_bits[] = { 0xNN,... }

<name> は任意の名前。
*_x_hot, *_y_hot は、カーソルイメージの場合のみ。
イメージデータは 1bit で、左上を先頭にして、下位ビットから順に並ぶ。Y1列は 8bit 単位。
int XReadBitmapFile(Display *display, Drawable d, char *filename, unsigned int *width_return, unsigned int *height_return,
    Pixmap *bitmap_return, int *x_hot_return, int *y_hot_return);
ビットマップファイルを読み読みます。
ファイルは現在のロケールのエンコーディングで解析されます。
標準形式以外を読み取る機能は、実装に依存します。
width_return,height_return
幅と高さを返す
bitmap_return
作成された Pixmap が返る
x_hot_return,y_hot_return
name_x_hot と name_y_hot が存在する場合、それらを返す。それ以外は -1 が返る。
戻り値
ファイルを開けない場合、BitmapOpenFailed を返します。
ファイルを開くことはできるが、有効なビットマップデータが含まれていない場合は、BitmapFileInvalid が返されます。
メモリが足りない場合は、BitmapNoMemory を返します。
ファイルが読み取り可能で、成功した場合は、BitmapSuccess が返されます。
int XReadBitmapFileData(char *filename, unsigned int *width_return, unsigned int *height_return,
    unsigned char *data_return, int *x_hot_return, int *y_hot_return);
XReadBitmapFile と同じ方法で、ビットマップファイルを読み取りますが、Pixmap を作成するのではなく、データを直接返します。
ビットマップデータは data_return で返されます。
クライアントは、ストレージを使い終わったら、XFree を呼び出してこのストレージを解放する必要があります。
ステータスやその他の戻り値は XReadBitmapFile と同じです。
int XWriteBitmapFile(Display *display, char *filename, Pixmap bitmap, unsigned int width, unsigned int height, int x_hot, int y_hot);
ビットマップを X11 形式でファイルに書き込みます。
出力ファイル内で使用される <name> の名前は、ファイル名からディレクトリパスを削除したものになります。
ファイルは現在のロケールのエンコーディングで書き込まれます。
x_hot と y_hot が -1 でない場合、XWriteBitmapFile はそれらをビットマップのホットスポット座標として書き込みます。
戻り値
ファイルを書き込み用に開くことができない場合は、BitmapOpenFailed が返されます。
割り当てられたメモリが不十分な場合、BitmapNoMemory を返します。
それ以外の場合、エラーがなければ、BitmapSuccess を返します。
Pixmap XCreatePixmapFromBitmapData(Display *display, Drawable d, char *data, unsigned int width, unsigned int height,
    unsigned long fg, unsigned long bg, unsigned int depth);
指定された深さの Pixmap を作成し、ビットマップデータから作成した XImage で XPutImage を実行して、Pixmap に転送する。
深度は、指定されたドローアブルのスクリーンでサポートされている必要があります。
サポートされていない場合は、BadMatch エラーが発生します。
Pixmap XCreateBitmapFromData(Display *display, Drawable d, char *data, unsigned int width, unsigned int height);
ビットマップデータから Pixmap を作成する。

割り当てられた作業ストレージが不十分な場合、None を返します。