来自 libpng 的文档:
如果您提前知道图像大小和像素大小,则可以在调用 png_read_png() 之前使用
分配 row_pointers row_pointers = png_malloc(png_ptr,
height*sizeof(png_bytep));
for (int i=0; i<height, i++)
row_pointers[i]=png_malloc(png_ptr,
width*pixel_size);
png_set_rows(png_ptr, info_ptr, &row_pointers);
但是 libpng 文档中的其他任何地方都没有提到术语“像素大小”。我很好奇它是什么意思以及它是如何计算的。
指的是每个像素用多少字节来表示。例如。 3 个用于 RGB,4 个用于 RGBA,1 个用于 8 位灰度或调色板颜色等
显示的计算对于小于一字节的像素大小是不正确的。灰度类型允许每个像素 1、2 和 4 位,在这种情况下,行的大小需要向上舍入到容纳它所需的字节数。