请教gtk显示视频的问题

发布于 2022-07-28 00:50:57 字数 3769 浏览 8 评论 1

[具体情况]
要用gtk播放一段视频,视频文件很特殊,是无制式的视频,每一帧图都由bmp的图像数据阵列(注:720*480的8位灰度图像)部分构成,

我写了一段代码,试图用gdk_pixmap_create_from_data()得到数据,并且在drawingarea中显示它(注:要在视频上画线),

[代码如下]
#include <gtk/gtk.h>

#define BUF_SIZE 720*480

static GtkWidget *window;
static GdkBitmap *mask;
static GdkPixmap *gdkpixmap;
static GtkWidget *image;
static GtkWidget *hbox;
static GtkWidget *drawingarea;
static GtkStyle *style;

/*刷新画图*/
static gboolean expose_event(GtkWidget *widget,GdkEventExpose *event,gpointer data)
{
    char buf[BUF_SIZE];
    FILE *fp;
    /*得到数据*/
    style = gtk_widget_get_style( window );
    if(fp=fopen("my.seq","r"))
    {
        printf("open file successful");
    }   
    do
    {
        fread(buf,sizeof(buf),1,fp);
   
        /*把数据分成每一帧,得到第一幅图像*/
        if(buf!=NULL)
        {
            gdkpixmap=gdk_pixmap_create_from_data(window->window,
                    buf,720,480,8,&style->black,&style->white);
            gdk_draw_drawable(widget->window,
                    widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
                    gdkpixmap,
                    0,0,0,0,-1,-1);
        }
        else
            break;
    }while(1);
    fclose(fp);

    return FALSE;
}   

int main(int argc,gchar *argv[])
{   
    gtk_init(&argc,&argv);
   
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"一个显示bmp的应用程序");
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window),720,480);
    g_signal_connect(G_OBJECT(window),"delete_event",
            G_CALLBACK(gtk_main_quit),NULL);
    gtk_widget_show(window);
   
    hbox=gtk_hbox_new(FALSE,0);
    gtk_container_add(GTK_CONTAINER(window),hbox);
    gtk_widget_show(hbox);
   
    drawingarea=gtk_drawing_area_new();
    gtk_box_pack_start(GTK_BOX(hbox),drawingarea,TRUE,TRUE,0);
    g_signal_connect(G_OBJECT(drawingarea),"expose_event",
            G_CALLBACK(expose_event),NULL);
    gtk_widget_show(drawingarea);

    gtk_main();
    return 0;
}

[报错如下]
(showvideo:11276): Gdk-WARNING **: Attempt to draw a drawable with depth 8 to a drawable with depth 24

请教,如何解决这个问题?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟酉 2022-08-05 16:42:32

depth :

the depth (number of bits per pixel) of the new pixmap.

我最近也在看类似东东,每次都搜到您的帖子,后来看了以下大概这个数值3*8=24比较合适。虽然是2年前的帖子,就当是一种对您安慰和对我自己的学习激励吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文