Загрузка изображений, язык C и GTK - PullRequest
3 голосов
/ 05 января 2010

Я получаю испорченное изображение (красный крестик на бумаге, он даже не начинает загружать то, что я хочу, я не знаю, достаточно ли это ясно), и не знаю почему, здесь это то, что я попробовал:

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 »: такого файла или каталога нет», он должен находиться в папке, где находится исполняемый файл? в любом случае, если я поставлю полный путь, он тоже не найдет

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

У меня была такая же проблема (на некоторых машинах), когда я скомпилировал приложение для Windows, используя последнюю версию GTK +. В более старых версиях GTK +, или, если быть точным, gdk-pixbuf, каждый плагин загрузки изображений предоставлял набор магических шаблонов для определения формата файлов, если они могут загружаться. Но затем glib получил API для идентификации файлов, gdk-pixbuf был обновлен, чтобы использовать его вместо этого. В Windows glib использует систему для идентификации файлов, но это часто приводит к сбою. GTK + не выясняет, что это за файл, и предполагает, что для него нет загрузчика. Это, однако, генерирует сообщение об ошибке в строках «загрузчик недоступен» или, по крайней мере, «изображение не может быть загружено». Но, может быть, это то, что вы получаете, тогда вы предоставляете весь путь?

Я решил проблему, определив типы файлов самостоятельно (используя код из PCManFM ) и загрузив изображение с указанным типом, используя gdk_pixbuf_loader_new_with_mime_type () . Немного громоздко, но с этим справились.

0 голосов
/ 06 января 2010

Glib / Gtk довольно многословны с ошибками в stdout / stderr, там ничего нет? Запустите программу под "strace -eopen", чтобы увидеть, какие файлы она пытается открыть? Вы абсолютно уверены, что изображение присутствует и доступно для чтения в процессе?

0 голосов
/ 05 января 2010

Проверьте, есть ли у вас модули загрузчика изображений 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);

, чтобы вы могли получить больше информации об ошибке.

...