2012 年 3 月 1 日更新:
这是一个简单的工作应用程序,它在其附近加载一个“test.jpg”文件(文件大小必须
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gtk/gtk.h>
void on_destroy (GtkWidget *widget G_GNUC_UNUSED, gpointer user_data G_GNUC_UNUSED)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
FILE *f;
guint8 buffer[100000];
gsize length;
GdkPixbufLoader *loader;
GdkPixbuf *pixbuf;
GtkWidget *window;
GtkWidget *image;
gtk_init (&argc, &argv);
f = fopen ("test.jpg", "r");
length = fread (buffer, 1, sizeof(buffer), f);
fclose (f);
loader = gdk_pixbuf_loader_new ();
gdk_pixbuf_loader_write (loader, buffer, length, NULL);
gdk_pixbuf_loader_close(loader, NULL);
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
image = gtk_image_new_from_pixbuf (pixbuf);
gtk_container_add (GTK_CONTAINER (window), image);
gtk_widget_show_all (GTK_WIDGET (window));
g_signal_connect (window, "destroy", G_CALLBACK(on_destroy), NULL);
gtk_main ();
return 0;
}
原答案:
The char *
or unsigned char *
这里并不重要。
gdk_pixbuf_new_from_data http://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-Image-Data-in-Memory.html#gdk-pixbuf-new-from-data只会读取带 Alpha 通道 (RGBA) 或不带 Alpha 通道 (RGB) 的未压缩 RGB 数据(唯一支持的颜色空间是 GDK_COLORSPACE_RGB)。难怪传递 JPEG 会失败。
Calling gdk_pixbuf_loader_write
看起来是一个更好的选择,但我们需要一些代码来看看您可能做错了什么。但是,通过在 shell 中运行以下命令来检查您是否安装了用于 jpg 的 pixbuf 加载程序:gdk-pixbuf-query-loaders
命令,并验证 JPEG 是否存在。