●GdkRGBを使用すると高速にビットマップを描画することができます。
詳しくは、http://www.gtk.org/からGDK Reference Manualを入手し、GdkRGBの項を見て下さい。
GLib,GTK,GDKの各Reference Manualは市販の書籍よりも遙かに優れています。

○概要
 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を参照して下さい。


戻る