2011-10-29 7 views
3

gtkmmの描画単一ピクセル

#include <gtk/gtk.h> 
#define IMAGE_WIDTH 256 
#define IMAGE_HEIGHT 256 
guchar rgbbuf[IMAGE_WIDTH * IMAGE_HEIGHT * 3]; 
gboolean on_darea_expose (GtkWidget *widget, 
      GdkEventExpose *event, 
      gpointer user_data); 
int 
main (int argc, char *argv[]) 
{ 
    GtkWidget *window, *darea; 
    gint x, y; 
    guchar *pos; 
    gtk_init (&argc, &argv); 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    darea = gtk_drawing_area_new(); 
    gtk_widget_set_size_request (darea, IMAGE_WIDTH, IMAGE_HEIGHT); 
    gtk_container_add (GTK_CONTAINER (window), darea); 
    gtk_signal_connect (GTK_OBJECT (darea), "expose-event", 
        GTK_SIGNAL_FUNC (on_darea_expose), NULL); 
    gtk_widget_show_all (window); 
    /* Set up the RGB buffer. */ 
    pos = rgbbuf; 
    for (y = 0; y < IMAGE_HEIGHT; y++) 
    { 
     for (x = 0; x < IMAGE_WIDTH; x++) 
    { 
     *pos++ = x - x % 32;   /* Red. */ 
     *pos++ = (x/32) * 4 + y - y % 32; /* Green. */ 
     *pos++ = y - y % 32;   /* Blue. */ 
    } 
    } 
    gtk_main(); 
    return 0; 
} 
gboolean 
on_darea_expose (GtkWidget *widget, 
    GdkEventExpose *event, 
    gpointer user_data) 
{ 
    gdk_draw_rgb_image (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], 
      0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, 
      GDK_RGB_DITHER_MAX, rgbbuf, IMAGE_WIDTH * 3); 
    return TRUE; 
} 

は、しかし、彼らは「gdk_draw_rgb_imageが廃止され、新たに書かれたコードでは使用すべきではない。」と言います

ピクセルの配列にイメージを置いて、ピクセルを直接操作できます。

基本的には、以前に変更したいピクセルの配列を「描画」したいだけです。カイロは素晴らしいツールですが、私の目的には適していません。したがって、rectangleはオプションではありません。

これはもうできませんか?

私が以前に述べた例はうまくいきましたが、私は新しいコードに廃止予定のライブラリを使用したくないです。

これ以外の方法でピクセルを描画するにはどうすればよいですか? これはgtkの例です。私たちはGtkMMを使用しており、これに相当するものがあるかどうかを知りたいと思います。

多くのおかげで、宜しく

答えて

2

あなたはカイロを使用するを持っている

すべてGDK描画関数は、あなたがカイロの対話機能gdk_cairo_set_source_pixbufgdk_cairo_rectanglehttp://developer.gnome.org/gdk3/stable/gdk3-Cairo-Interaction.htmlGdkPixbufhttp://developer.gnome.org/gdk-pixbuf/unstable//gdk-pixbuf-The-GdkPixbuf-Structure.html#GdkPixbufを使用することができますGDK 3.

で非推奨となり、削除されます。

+0

これはGTKでもうまくいくかもしれませんが、cairommでは、Pixbufを引数として 'Cairo :: Context'に' set_source_ * 'というメソッドはありません。 – Atmocreations

+1

@Atmocreations、cairommでは、 'Cairo :: Context :: set_source'を' Cairo :: SurfacePattern'を 'Cairo :: ImageSurface'にラップして使うことができます。 – chill

+0

ありがとう!ちょっとした汚れでしたが、うまく機能しました。 – Atmocreations

0

hereのような独自の "put_pixels(...)"機能を構築することができます。 ピクセルバッファで操作する必要があります。

この手法も使用しました。

関連する問題