Pixbuf показывает неверную информацию об изображении - PullRequest
0 голосов
/ 09 ноября 2011

Независимо от того, какое изображение я загружаю в 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 Ответ

2 голосов
/ 12 ноября 2011

Обратите внимание, что GdkPixbuf поддерживает очень ограниченный набор форматов пикселей:

  • RGB-цвет, 8 бит на канал
  • 8-битный альфа-канал или вообще без альфа-канала

Когда вы загружаете изображение с помощью GdkPixbuf, оно преобразует изображение в 24-битный RGB, плюс 8-битный альфа, если изображение имело прозрачность.Например, если вы загрузите изображение в градациях серого, оно будет «взорвано» по каналам RGB.Вот почему вы всегда получаете GDK_COLORSPACE_RGB из gdk_pixbuf_get_colorspace () и 8 из _get_bits_per_sample ().

Это неоптимально, но у нас было время для реализации , что , когда мы изначально писалиGdkPixbuf.Конечно, у IrfanView будет более сложное представление о представлении изображений - оно покажет вам, что объявляет исходный файл изображения, а не внутреннее представление, которое имеет изображение, когда оно декодируется.

...