3

我不断收到损坏的图像(纸张中的红色“X”,它甚至没有开始加载我想要的图像,我不知道这是否足够清楚)并且不知道为什么,这就是我试过:

image = gtk_image_new_from_file("abc.png");
gtk_container_add (GTK_CONTAINER (window), image);
gtk_widget_show (image);
gtk_widget_show (window);`

我是 GUI 编程的新手,所以请善待!哈哈

我忘了说这是在windows下

更新:注意到错误在“gdk_pixbuf_new_from_file”中,它返回错误值,还不能解决问题

如果我运行调试器,它会显示“加载文件时出错:#4 无法打开文件'abc.jpeg':没有这样的文件或目录”,它应该在可执行文件所在的文件夹中?无论如何,如果我输入完整的路径,它也找不到

4

3 回答 3

2

我遇到了同样的问题(在某些机器上),然后我使用最新版本的 GTK+ 为 Windows 编译了一个应用程序。在旧版本的 GTK+,或者确切地说是 gdk-pixbuf 中,每个图像加载插件都提供了一组魔术模式来识别文件格式(如果可以加载)。但随后 glib 获得了一个用于识别文件的 API,gdk-pixbuf 被更新为使用它。在 Windows 上 glib 依赖于系统来识别文件,但它经常失败。GTK+ 不知道它是什么类型的文件,并假设没有可用的加载器。但是,这会在“没有可用的加载器”或至少“无法加载图像”行中生成错误消息。但也许这就是你得到的然后你提供整个路径?

我通过自己识别文件类型(使用来自PCManFM的代码)并使用gdk_pixbuf_loader_new_with_mime_type()以明确指定的类型加载图像 来解决了这个问题。有点麻烦,但它完成了工作。

于 2010-07-18T21:44:43.183 回答
0

检查您是否有 GdkPixbuf 图像加载器模块。通常它们位于 lib/gtk-2.0/2.10.0/loaders/ 目录中。您应该会看到一些 libpixbufloader-bmp.dll 文件,每个文件对应一种支持的图像格式。

您还可以尝试使用以下方法加载图像:

GError *error = NULL;
GdkPixbuf *pix = gdk_pixbuf_new_from_file ("abc.png", &error);
if (pix == NULL) {
    g_printerr ("Error loading file: #%d %s\n", error->code, error->message);
    g_error_free (error);
    exit (1);
}
GtkWidget *widget = gtk_image_new_from_pixbuf (pix);

以便您可以获得更多错误信息。

于 2010-01-05T17:25:04.643 回答
0

Glib/Gtk 非常冗长,对 stdout/stderr 有错误,那里什么都没有?在“strace -eopen”下运行程序,看看它试图打开哪些文件?您是否绝对确定图像存在并且该过程可以读取?

于 2010-01-05T21:10:52.727 回答