2013-02-14 41 views
0

我想用庫Libpng生成1bits(2色)或2bit(4色)深度的PNG圖像。用Libpng創建2bits顏色深度PNG圖像

有人知道該怎麼做嗎?我已經測試了一些例子,它們似乎都適用於8位顏色深度?

我知道png_set_IHDR,但在我測試的例子中,當我將png_set_IHDR中的深度參數從8更改爲2或1時,我的程序繪製了2或4個像素。我認爲,這是由於png_malloc函數。

在我嘗試修改(http://www.lemoda.net/c/write-png/)的示例中,png_malloc函數分配了sizeof uint8_t圖像的所有像素。

png_malloc (png_ptr, sizeof (uint8_t) * bitmap->width * pixel_size); 

你能告訴我如何分配1位或2位像素?

感謝的 Jo2s

+0

它通過使用位深度爲1或2的'png_set_IHDR'直接完成。您還需要什麼? – mmgp 2013-02-14 22:48:46

回答

1

在png_set_IHDR中,bit_depth參數設置所有顏色分量的位深度。與PNG_COLOR_TYPE_RGB一起,您最終會得到一個紅色分量,一個綠色分量和一個藍色分量。

你應該叫png_set_IHDR與PNG_COLOR_TYPE_PALETTE,然後如果bit_depth是一個,你必須有兩種顏色的調色板(0和1),如果bit_depth是2,一個用四種顏色(0〜3)

+0

對於PNG_COLOR_TYPE_RGB,PNG規範只允許位深度8和16。所以是的,你應該使用PNG_COLOR_TYPE_PALETTE,就像Andre說的那樣。 – 2014-02-18 00:18:23