Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,v retrieving revision 1.2 diff -u -r1.2 gnu_java_awt_peer_gtk_GtkImage.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 4 Jun 2005 07:54:56 -0000 1.2 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 5 Jun 2005 02:05:02 -0000 @@ -107,7 +107,7 @@ guchar *pixeldata; jintArray result_array; jint *result_array_iter, *dst; - int i; + int i,j; gdk_threads_enter (); @@ -121,13 +121,31 @@ (*env)->GetIntArrayElements (env, result_array, NULL); pixeldata = gdk_pixbuf_get_pixels (pixbuf); - for(i = 0 ; i < height; i++) + + /* FIXME: handle more bit depths here? */ + g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8); + + if (gdk_pixbuf_get_has_alpha (pixbuf)) { - memcpy(dst, (void *)pixeldata, width * 4); - dst += width; - pixeldata += rowstride; + for(i = 0 ; i < height; i++) + { + memcpy(dst, (void *)pixeldata, width * 4); + dst += width; + pixeldata += rowstride; + } + } else { + for(i = 0; i < height; i++) + { + for(j = 0; j < width; j++) + dst[j] = 0xFF000000 | + (pixeldata[j*3 + 2] & 0xFF) << 16 | + (pixeldata[j*3 + 1] & 0xFF) << 8 | + (pixeldata[j*3] & 0xFF); + dst += width; + pixeldata += rowstride; + } } - + if (offScreen (env, obj) == JNI_TRUE) gdk_pixbuf_unref (pixbuf);