2010-01-05 2 views
3

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

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

Я новичок в программировании GUI поэтому, пожалуйста, хорошо! ха-ха

Я забыл сказать, что это под окнами

UPDATE: заметил, что ошибка в «gdk_pixbuf_new_from_file» он возвращает мне значение ошибки, не может решить проблему еще

если я бегу отладчик говорит: «Ошибка загрузки файла: # 4 Не удалось открыть файл« abc.jpeg »: нет такого файла или каталога», он должен находиться в папке, где находится исполняемый файл? в любом случае, если я поставлю полный путь, он не найдет его либо

+0

Что вы подразумеваете под сломанным изображением? Разве это не ясно или не отображается полностью? –

+0

Я думаю, вам нужно указать полный путь к файлу – qrdl

+0

i allready попробовал, что он не работает ни – Machuk

ответ

2

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

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

+0

спасибо, это было для колледжа proyect, но я уже закончил его. Я закончил работу над linux, это сработало в первый раз, когда я попытался, но было немного затруднительно установить SO и все необходимые пакеты, поскольку я никогда не использовал его раньше. – Machuk

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); 

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

+0

«Процесс завершен с состоянием 1 (0 минут, 0 секунд)» должна быть какая-то ошибка, из-за которой gdk_pixbuf_new_from_file возвращает NULL. – Machuk

0

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