2011-11-08 44 views
0

無論我加載到Gdk :: Pixbuf(使用GTKmm)的圖片都始終顯示相同的信息。我正在使用函數get_n_channels(),get_bits_per_sample()get_has_alpha()Pixbuf顯示關於圖像的錯誤信息

我檢查其他程序的圖像,他們顯示不同(但正確)的信息。幫幫我!

我的一些代碼:

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 

回答

2

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

  • RGB色,每通道
  • 8位
  • 8位alpha通道,或根本沒有alpha

當您使用GdkPixbuf加載圖像時,它會將圖像轉換爲24位RGB,加上8位阿爾法,如果圖像具有透明度。例如,如果您加載灰度圖像,它將會「爆炸」到RGB通道。這就是爲什麼你只能從gdk_pixbuf_get_colorspace()中獲得GDK_COLORSPACE_RGB,而在_get_bits_per_sample()中只有8個。

這是不理想的,但我們只有時間實施當我們最初寫GdkPixbuf時。 IrfanView當然會有更復雜的圖像表示方法 - 它會告訴你原始圖像文件的聲明,而不是圖像在解碼時的內部表示。