○概要
1ピクセルを、Red1バイト(値は0〜255)、Green1バイト、Blue1バイトの3バイトで表し、
それを行数×列数個並べた1次元の配列としてビットマップを表します。
つまり、
#include <gtk/gtk.h>
#define IMAGE_WIDTH 幅
#define IMAGE_HEIGHT 高さ
guchar rgb_buf[IMAGE_WIDTH * IMAGE_HEIGHT * 3];
として画像をrgb_bufで表すと、(x,y)の座標のピクセルは、
赤: rgb_buf[ (y * IMAGE_WIDTH + x) * 3 ]
緑: rgb_buf[ (y * IMAGE_WIDTH + x) * 3 + 1 ]
青: rgb_buf[ (y * IMAGE_WIDTH + x) * 3 + 2 ]
の3バイトで表されます。
さて、この画像をGdkRgb関数群に渡して処理をするのですが、その前に、
gdk_rgb_init()
を呼び出す必要があります。
画像をwidgetに表示するには、gdk_draw_rgb_imageを使用します。
16bits/pixelのディザリングを使う場合は、以下のようになります。
gdk_draw_rgb_image (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, IMAGE_WIDTH, IMAGE_HEIGHT,
GDK_RGB_DITHER_MAX, rgb_buf, IMAGE_WIDTH * 3);
例えばGtkDrawingAreaに表示する場合は、事前に
GtkWidget *d_area;
d_area = gtk_drawing_area_new();
gtk_drawing_area_size (GTK_DRAWING_AREA (d_area), IMAGE_WIDTH, IMAGE_HEIGHT);
等としておきます。
ともあれ、GDK Reference Manualを参照して下さい。