Chinaunix

标题: 求教GTK显示图像像素的方法(pixmap) [打印本页]

作者: wjc520_a    时间: 2006-07-17 09:22
标题: 求教GTK显示图像像素的方法(pixmap)
各位大侠:本人在linux 下采集摄像头的图像数据,打算用GDK中pixmap 来显示,用到以下API:

       GdkBitmap *mask;
       GdkPixmap *gdkpixmap;
       GtkWidget *image;
   
1);gdkpixmap=gdk_pixmap_create_from_data(MainWindow->window,(gchar *)vd->map, VIDEO_WIDTH,      VIDEO_HEIGTH,24,&MainWindow->style->fg[GTK_STATE_NORMAL],&MainWindow->style->bg[GTK_STATE_NORMAL]);         
2);mask=( GdkBitmap *)gdk_bitmap_create_from_data(NULL,(gchar *)vd->map,VIDEO_WIDTH, VIDEO_HEIGTH);       
                                 
3);image=gtk_image_new_from_pixmap(gdkpixmap,mask);  

最后把image 放到box 显示,gtk_box_pack_start(GTK_BOX(hbox1),image,0,0,0);
        gtk_widget_show(hbox1);
        gtk_widget_show(image);       
但显示的是黑白条纹没有显示正确的图像;---请问是什么原因??????????????????????????


图像数据是OK的,我是可以保存为.BMP图片了
1) gdkpixmap=gdk_pixmap_create_from_xpm(MainWindow->window,&mask,NULL,"/root/CH1.bmp");
2) image=gtk_pixmap_new(gdkpixmap,mask);
3: gtk_widget_show(hbox1);
4: gtk_widget_show(image); 是能显示图片的---OK 的~~~!!!!

请问各位我用上面第一中方法直接显示为什么不行,谢谢指教~~!!

[ 本帖最后由 wjc520_a 于 2006-7-17 09:24 编辑 ]
作者: assiss    时间: 2006-07-17 10:12
你的图像是位图吗?即黑白二值的图像?

如果不是位图,那应该用pixbuf,具体参考gdk-pixbuf中的Image Data in Memory一章。
作者: wjc520_a    时间: 2006-07-17 13:49
标题: 谢谢答疑
谢谢大天使的回答,

当gdk_pixbuf_new_from_data()后  用 :gtk_image_new_from_pixbuf();????????

能不能提供些关于Gdk 的参考资料呢???
gdk_pixbuf_new_from_data()里面的有些参数不怎么明白,还有 色盘怎么设置??

你说的---具体参考gdk-pixbuf中的Image Data in Memory一章。

是不是系统上的/usr/share/doc/gdk 的资料呢??

再次谢谢大天使~!!!
作者: assiss    时间: 2006-07-17 14:38
大天使是表示你发帖子数量的级别(我的帖子大多数是灌水而来)。

GTK+的参考资料最主要以官方站点为主,不过一般装GTK+的时候应该附带安装了相关的文档。
http://www.gtk.org/api/
作者: wjc520_a    时间: 2006-07-17 14:57
assiss 你好酷噢~!
谢谢
作者: wjc520_a    时间: 2006-07-18 09:17
GdkPixbuf *gdk_pixbuf_new_from_data (const guchar *data,
                                     GdkColorspace colorspace,
                                     gboolean has_alpha,
                                     int bits_per_sample,
                                     int width, int height,
                                     int rowstride,
                                     GdkPixbufDestroyNotify destroy_fn,
                                     gpointer destroy_fn_data);
后面的两个参数看不明白,哪位朋友能解释一下,谢~!
作者: wjc520_a    时间: 2006-07-21 09:34
please help me
作者: x2    时间: 2006-07-21 15:54
  1. #include <gtk/gtk.h>

  2. static void destroy_fn(unsigned char* pixels, gpointer data);

  3. int main(int argc, char** argv)
  4. {
  5.         gtk_init(&argc, &argv);

  6.         GtkWidget* window;

  7.         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  8.         g_signal_connect(G_OBJECT(window), "destroy",
  9.                         G_CALLBACK(gtk_main_quit), NULL);

  10.         gtk_widget_show_all(window);

  11.         unsigned char* data = new unsigned char[3*25];

  12.         printf("data的地址\t == %p\n", data);
  13.        
  14.         for(int i=0;i<75;i++)
  15.         {
  16.                 data[i] = i%26 + 'A';
  17.         }

  18.         GdkPixbuf* buf;
  19.         buf = gdk_pixbuf_new_from_data(data, GDK_COLORSPACE_RGB,
  20.                         false,
  21.                         8,
  22.                         5,5,15,
  23.                         destroy_fn,NULL);

  24.         g_object_unref(G_OBJECT(buf));

  25.         gtk_main();

  26.         return 0;

  27. }

  28. //可以在这里看出 destroy_fn 的用途。
  29. static void destroy_fn(unsigned char* pixels, gpointer data)
  30. {
  31.         printf("pixels 的地址\t == %p\n", pixels);
  32.         printf("%s\n", pixels);
  33.         delete []pixels;
  34. }
复制代码

作者: wjc520_a    时间: 2006-08-10 09:04
搞了一段时间其他的  现在又回来看GdkPixbuf *gdk_pixbuf_new_from_data (const guchar *data,
                                     GdkColorspace colorspace,
                                     gboolean has_alpha,
                                     int bits_per_sample,
                                     int width, int height,
                                     int rowstride,
                                     GdkPixbufDestroyNotify destroy_fn,
                                     gpointer destroy_fn_data);
始终还是不明白楼上的,现在还是显示不到图像,int rowstride,GdkPixbufDestroyNotify destroy_f,
                                     gpointer destroy_fn_data,三个参数还是不明白~!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2