On Tue, 2005-11-29 at 15:07 +0000, Michael Noonan wrote:
> Hello,
> 
> I'm new to using gtk and would really appreciate it if
> anybody could help me. 
> 
> I'm trying to display an image on the screen thats
> created from individual pixel information. I create
> the image and then set the indivisual pixels. Then I
> try to display the image but I keep getting errors
> when I try to execute. 
> 
> Am I going about this the wrong way! I've attached the
> code below.
> 
> Thanks in advance.
> Mike
> 
> #include <stdio.h>
> #include <gtk/gtk.h>
> #include <gdk/gdktypes.h>
> using namespace std;

this is C++, shouldn't be there

> int main( int argc, char *argv[])
> {
>       GtkWidget *window;
>       GtkWidget *canvas;
>       GdkVisual *visual;
>       GdkImage *image;
>       GdkGC *gc;
>       
>       int i, j;
>       unsigned char frame_data[128][64];
>               
>       window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
>       
>       gtk_widget_set_size_request(GTK_WIDGET(window), 1024,
> 768);
>       
>       g_signal_connect(G_OBJECT(window), "destroy",
> G_CALLBACK(gtk_main_quit), NULL);
>       
>       visual = gdk_visual_get_system();
>       image = gdk_image_new( GDK_IMAGE_FASTEST, visual, 64,
> 128 );
>       
>       gc = gdk_gc_new( GTK_WIDGET( window )->window );
You should probably take the drawable (i.e. GdkWindow) from the drawing
area. Furthermore, you cannot create the GC just yet since window (or
canvas) doesn't have a GdkWindow until it is realised. What you need to
do is to create a global variable that contains the resources you need
and then create the GC when the signal "configure-event" is emitted and
store it in the global variable. You can also pass a heap-allocated
structure via the user_data parameter.

        
>       canvas = gtk_drawing_area_new();
>       gtk_container_add( GTK_CONTAINER( window ), canvas);
>       gtk_widget_show(canvas);
>       
>       //set the individual pixels
>       for( i = 0; i < 128; i++ )
>       {
>               for( j = 0; j < 64; j++ )
>               { 
>                       gdk_image_put_pixel( image, i, j, data[i][j] );
>               }
>       }
>               
>       gdk_draw_image( GTK_WIDGET( canvas )->window, gc,
> image, 0,0,0,0, 64, 128);
Same here. You need to connect to the "expose-event" signal (which also
gives you the area that needs to be redrawn). You need to store the data
in the global variable or in a heap-allocated region that you pass via
the user_data pointer.

Hope this helps,
Axel.


_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to