2014-03-05 88 views
1

我使用libpng for C,我是圖像處理新手。libpng,c代碼,如何將RGB值轉換爲像素值?

我用png_get_IHDR()來獲取寬度,高度,color_type和bit_depth,我得到了一個形象的值是:

color_type = 6 (PNG_COLOR_TYPE_RGB_ALPHA) 
bit_depth = 8 
width = 1850 
height = 2048 

I use png_get_channels() to get the channels which is 4 
I use png_get_rowbytes() to get the bytes per row which is 7400 (1850*4) 
I use png_read_image() to get all the image data 

我的目標是將RGB值轉換爲像素值,這是所有!我知道每個像素的R,G,B和Alpha值都按順序存儲在圖像數據緩衝區中,似乎不同的bit_depth的轉換方法是不同的。我也可以忽略Alpha值,在轉換時只使用R,G,B值嗎?任何人都可以幫忙謝謝!

+1

你是什麼意思「將RGB值轉換爲像素值」?像素通常只是RGB值。你怎麼定義一個像素? – user1118321

回答

1

如果您不想再擔心由於color_type差異和bit_depth, 總要忽略alpha通道,使用

png_set_expand(png_ptr); 
png_set_strip_16(png_ptr); 
if (color_type & PNG_COLOR_MASK_ALPHA) 
    png_set_strip_alpha(png_ptr); 

那麼你的行總是包含8位的R,G ,B,R,G,B ...樣本,每個像素一組三個字節,每行「寬度」組。

如果使用libpng-1.5.6或更高版本構建,則可以使用 「png_set_scale_16(png_ptr)」來代替;它將16位樣本 更精確地縮放到8位。

+0

明白了,謝謝! – oldnavy