0

我想使用 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);

你能告诉我如何分配 1bit 或 2bits 像素吗?

谢谢Jo2s

4

1 回答 1

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)的调色板。

于 2013-05-22T02:30:42.307 回答