请教gtk显示视频的问题
[具体情况]
要用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
depth :
the depth (number of bits per pixel) of the new pixmap.
我最近也在看类似东东,每次都搜到您的帖子,后来看了以下大概这个数值3*8=24比较合适。虽然是2年前的帖子,就当是一种对您安慰和对我自己的学习激励吧。