无论我加载到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
答案 0 :(得分:2)
请注意,GdkPixbuf支持一组非常有限的像素格式:
使用GdkPixbuf加载图像时,如果图像具有透明度,它会将图像转换为24位RGB,加上8位alpha。例如,如果您加载灰度图像,它将“爆炸”到RGB通道。这就是为什么你只从gdk_pixbuf_get_colorspace()中获取GDK_COLORSPACE_RGB,以及_get_bits_per_sample()中的8个。
这不是最理想的,但是当我们最初编写GdkPixbuf时,我们只有时间实现 。 IrfanView当然会有一个更复杂的图像表示理念 - 它会显示原始图像文件声明的内容,而不是图像在解码时的内部表示。