我想用库Libpng生成1位(2种颜色)或2位(4种颜色)深度的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)
在png_set_IHDR中,bit_depth参数设置所有颜色分量的位深度。与PNG_COLOR_TYPE_RGB一起,您最终得到一个红色组件,一个用于绿色,一个用于蓝色。
你应该用PNG_COLOR_TYPE_PALETTE调用png_set_IHDR,然后如果bit_depth是1,你必须有一个有两种颜色(0和1)的调色板,如果bit_depth是2,一个有四种颜色(0到3。)