LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1943|回复: 11

怎样用gtk+directfb显示图片呢?

[复制链接]
发表于 2009-11-16 10:07:13 | 显示全部楼层 |阅读模式
大家好,使用gtk_image_new_from_file这个函数在directfb上不能显示图片,应该用什么方法显示呢,谢谢大家
发表于 2009-11-16 10:21:29 | 显示全部楼层
如果真要别人帮你,show your code first.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-16 12:00:36 | 显示全部楼层
Post by realtang;2046357
如果真要别人帮你,show your code first.
/*
============================================================================
Name        : gtkshowimage.c
Author      :
Version     :
Copyright   : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>

static gchar *icons[9] =
{
        "folder", "web", "mail",
        "movie",  "weather", "tools",
        "tv",      "phone", "note"
};

static gint width, height;
static GtkWidget * btns[9];
static GtkWidget * fixed;

void delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
        gtk_main_quit();
}


GtkWidget *label_box(gchar *filename, gchar *label_text)
{
        GtkWidget *box;
        GtkWidget *label;
        GtkWidget *image = NULL;

        // create a box
        box = gtk_vbox_new(FALSE, 0);
        gtk_container_set_border_width(GTK_CONTAINER(box), 2);

        // create a image
        image = gtk_image_new_from_file(filename);
        if (!image) {
                printf("gtk_image_new_from_file error %s\n", filename);
        }

        // create a label
        label = gtk_label_new(label_text);

        gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 3);
        gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 3);

        gtk_widget_show(image);
        gtk_widget_show(label);

        return box;
}


void create_main_window()
{
        GtkWidget *window;
        GtkWidget *button;
        GtkWidget *box;
        int        i;
        gchar     filename[30];

        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

        g_signal_connect(G_OBJECT(window), "delete_event",
                                        G_CALLBACK(delete_event), NULL);

        GdkScreen *screen = NULL;
        gdk_display_get_pointer(gdk_display_get_default(), &screen,
                                                        NULL, NULL, NULL);
        width  = gdk_screen_get_width(screen);
        height = gdk_screen_get_height(screen);

        gtk_window_set_default_size(GTK_WINDOW(window), width*9/5, height/4);
        gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
        gtk_window_move(GTK_WINDOW(window), 0, height*4/5);
        fixed = gtk_fixed_new();


        gtk_container_add(GTK_CONTAINER(window), fixed);

        for(i=0; i<9; i++)
        {
                sprintf(filename, "images/%s.png", icons);
                button = gtk_button_new();
                btns = button;

                box = label_box(filename, icons);
                gtk_container_add(GTK_CONTAINER(button), box);


                if(i==1)
                {
                        gtk_widget_set_size_request(button, width/5, height/4);
                        gtk_fixed_put(GTK_FIXED(fixed), button, i*width/5, 0);
                }
                else
                {
                        gtk_widget_set_size_request(button, width/5, height/5);
                        gtk_fixed_put(GTK_FIXED(fixed), button, i*width/5, 20);
                }
        }

        gtk_widget_show_all(window);

}

int main(int argc, char **argv)
{

        gtk_init(&argc, &argv);

        create_main_window();

        gtk_main();

        return 0;
}
只是代码,在X11下是可以显示图片的,但是在开发板上的gtk+directfb环境就不能显示,请问gtk+directfb怎样显示图片呢?谢谢了
回复 支持 反对

使用道具 举报

发表于 2009-11-16 16:30:56 | 显示全部楼层
我在xubuntu 9.04下在directfb下测试通过的,以下是我的代码。
  1. #include <gtk/gtk.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. static gchar *icons[9] =
  5. {
  6. "folder", "web", "mail",
  7. "movie", "weather", "tools",
  8. "tv", "phone", "note"
  9. };
  10. static gint width, height;
  11. static GtkWidget * btns[9];
  12. static GtkWidget * fixed;
  13. void delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
  14. {
  15.         gtk_main_quit();
  16. }
  17. GtkWidget *label_box(gchar *filename, gchar *label_text)
  18. {
  19.         GtkWidget *box;
  20.         GtkWidget *label;
  21.         GtkWidget *image = NULL;
  22.        
  23.         // create a box
  24.         box = gtk_vbox_new(FALSE, 0);
  25.         gtk_container_set_border_width(GTK_CONTAINER(box), 2);
  26.        
  27.         // create a image
  28.         image = gtk_image_new_from_file(filename);
  29.         if (!image)
  30.         {
  31.                 printf("gtk_image_new_from_file error %s\n", filename);
  32.         }
  33.        
  34.         // create a label
  35.         label = gtk_label_new(label_text);
  36.        
  37.         gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 3);
  38.         gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 3);
  39.        
  40.         gtk_widget_show(image);
  41.         gtk_widget_show(label);
  42.        
  43.         return box;
  44. }
  45. void create_main_window()
  46. {
  47.         GtkWidget *window;
  48.         GtkWidget *button;
  49.         GtkWidget *box;
  50.         int i;
  51.         gchar filename[30];
  52.        
  53.         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  54.        
  55.         g_signal_connect(G_OBJECT(window), "delete_event",
  56.         G_CALLBACK(delete_event), NULL);
  57.        
  58.         GdkScreen *screen = gdk_screen_get_default();
  59.         //gdk_display_get_pointer(gdk_display_get_default(), &screen,
  60.         //                NULL, NULL, NULL);
  61.         width = gdk_screen_get_width(screen);
  62.         height = gdk_screen_get_height(screen);
  63.        
  64.         gtk_window_set_default_size(GTK_WINDOW(window), width*9/5, height/4);
  65.         //gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
  66.         gtk_window_move(GTK_WINDOW(window), 0, height*4/5);
  67.         fixed = gtk_fixed_new();
  68.        
  69.        
  70.         gtk_container_add(GTK_CONTAINER(window), fixed);
  71.        
  72.         button = gtk_button_new();
  73.         box = label_box("tux.jpg", "tux");
  74.         gtk_container_add(GTK_CONTAINER(button), box);
  75.         gtk_widget_set_size_request(button, width/5, height/4);
  76.         gtk_fixed_put(GTK_FIXED(fixed), button, 0, 0);
  77.        
  78.         /*
  79.         for(i=0; i<9; i++)
  80.         {
  81.                 sprintf(filename, "images/%s.png", icons[i]);
  82.                 button = gtk_button_new();
  83.                 btns[i] = button;
  84.                
  85.                 box = label_box(filename, icons[i]);
  86.                 gtk_container_add(GTK_CONTAINER(button), box);
  87.                
  88.                
  89.                 if(i==1)
  90.                 {
  91.                         gtk_widget_set_size_request(button, width/5, height/4);
  92.                         gtk_fixed_put(GTK_FIXED(fixed), button, i*width/5, 0);
  93.                 }
  94.                 else
  95.                 {
  96.                         gtk_widget_set_size_request(button, width/5, height/5);
  97.                         gtk_fixed_put(GTK_FIXED(fixed), button, i*width/5, 20);
  98.                 }
  99.         }
  100.         */
  101.         gtk_widget_show_all(window);
  102. }
  103. int main(int argc, char **argv)
  104. {
  105.         gtk_init(&argc, &argv);
  106.        
  107.         create_main_window();
  108.        
  109.         gtk_main();
  110.        
  111.         return 0;
  112. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-16 17:53:42 | 显示全部楼层
感觉版主的代码和我的显示图片的方式是一样的啊,我在PC机的X11环境下可以显示图片,在PC机的gtk+directfb环境也可以显示图片,但是到我的开发板的基于framebuffer的gtk+directfb就不能显示图片了,官方的gtk-demo也不能,不知是怎么回事,gtk+directfb还有其他的显示图片方式吗?谢谢了
回复 支持 反对

使用道具 举报

发表于 2009-11-16 18:01:14 | 显示全部楼层
不妨把板子寄给我用用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-16 18:45:16 | 显示全部楼层
谢谢版主了,基于framebuffer的gtk+directfb还有其它的显示图片的方法吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 18:40:52 | 显示全部楼层
有知道的吗?有谁在开发板的gtk+directfb上显示过图片呢?
回复 支持 反对

使用道具 举报

发表于 2009-11-20 10:09:23 | 显示全部楼层
- - 你的那是什么板子啊?
驱动有问题吧?要不就是库有问题
回复 支持 反对

使用道具 举报

发表于 2009-11-20 10:27:36 | 显示全部楼层
4楼的代码

mipsel-poky-linux-gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`

编译通过,开发板运行没问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表