使用 GTK+ 3.6 我想显示来自内存缓冲区的图像,而不是磁盘上的文件。我有一个const char *data
图像数据,我正在尝试从中创建一个 GTK 图像。到目前为止,我已经尝试了两种我认为可行的方法。两者都使用 GdkPixbuf,因此要求图像数据为guchar* (unsigned char*)
.
有了这个要求,我必须转换数据:
guchar *gudata = reinterpret_cast<guchar*>(const_cast<char*>(data));
然后我尝试了以下方法:
gdk_pixbuf_loader_write
使用.将数据写入 GdkPixbufLoader 在这里我收到一个错误"Unrecognized image file format"
,或者如果我创建具有特定类型 (jpg) 的加载程序,我收到一个错误,指出它不是 JPG 文件格式(它是,如下所述)。编辑:一些代码:
guchar *gudata = reinterpret_cast<guchar*>(const_cast<char*>(data)); int stride = ((1056 * 32 + 31) & ~31)/8; GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); GError *error = NULL; if(!gdk_pixbuf_loader_write(loader, gudata, data_size, &error) { printf("Error:\n%s\n", error->message); }
编辑 03/01/2013:从写入函数中删除了步幅参数 - 打印错误。
开罗表面也不能正常工作。显示黑屏和噪音。
初始化 pixbuf,
gdk_pixbuf_new_from_data
然后图像看起来像电视噪声,这表明数据错误(并且它已被投射),或者其他参数错误(图像行步幅,但不是 :))。
foo.jpg
出现错误后,我只是尝试使用将数据写入文件ofstream
,是的,我得到了一个正常工作的图像文件。终端中的file
命令确认它是一个 JPEG 图像,并且通过一个简单的代码块,我从该 foo.jpg 创建了一个 GdkPixbuf 来检查它的行步幅值,它与我传递给上述函数的值相匹配。
图像数据是否会因演员阵容而损坏,如果是,我该如何解决?我在const char*
. 我看过 QtPixmap 并且它也加载了unsigned char*
.
我需要使用单独的库吗?(libjpeg?)我安装了 libgtk3-dev。
谢谢!