#c #image #user-interface #gtk #gtkmm
#c #изображение #пользовательский интерфейс #gtk #gtkmm
Вопрос:
Независимо от того, какое изображение я загружаю в Gdk::Pixbuf (используя GTKmm), оно всегда показывает одну и ту же информацию. Я имею в виду функции get_n_channels(), get_bits_per_sample() и get_has_alpha().
Я проверяю изображения другими программами, и они показывают другую (но правильную) информацию. Помогите!
Часть моего кода:
Glib::RefPtr<Gdk::Pixbuf> ob = scene.get_pixbuf(); // some image
stringstream out;
out.str("");
out << ob->get_n_channels();
tekst ="Nr. of channels: <b>" out.str() "</b>n";
out.str("");
out << ob->get_bits_per_sample();
tekst ="bits per sample: <b>" out.str() "</b>n";
tekst ="alpha canal: <b>";
if (ob->get_has_alpha())tekst ="yes</b>n";
else tekst ="no</b>n";
info.set_markup(tekst); // Gtk::Label
Ответ №1:
Обратите внимание, что GdkPixbuf поддерживает очень ограниченный набор форматов пикселей:
- Цвет RGB, 8 бит на канал
- 8-разрядный альфа-канал, или альфа отсутствует вообще
Когда вы загружаете изображение с помощью GdkPixbuf, оно преобразует изображение в 24-битный RGB плюс 8-битный alpha, если изображение имеет прозрачность. Например, если вы загрузите изображение в оттенках серого, оно будет «разбито» на каналы RGB. Вот почему вы получаете только GDK_COLORSPACE_RGB из gdk_pixbuf_get_colorspace() и 8 из _get_bits_per_sample().
Это неоптимально, но у нас было время реализовать это только тогда, когда мы изначально писали GdkPixbuf. IrfanView, конечно, будет иметь более сложное представление о представлениях изображений — он покажет вам, что объявляет исходный файл изображения, а не внутреннее представление, которое изображение имеет при декодировании.