Pixbuf显示有关图像的错误信息

时间:2011-11-08 21:09:03

标签: c++ image user-interface 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 个答案:

答案 0 :(得分:2)

请注意,GdkPixbuf支持一组非常有限的像素格式:

  • RGB颜色,每通道8位
  • 8位Alpha通道,或根本没有alpha

使用GdkPixbuf加载图像时,如果图像具有透明度,它会将图像转换为24位RGB,加上8位alpha。例如,如果您加载灰度图像,它将“爆炸”到RGB通道。这就是为什么你只从gdk_pixbuf_get_colorspace()中获取GDK_COLORSPACE_RGB,以及_get_bits_per_sample()中的8个。

这不是最理想的,但是当我们最初编写GdkPixbuf时,我们只有时间实现 。 IrfanView当然会有一个更复杂的图像表示理念 - 它会显示原始图像文件声明的内容,而不是图像在解码时的内部表示。