You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

libpng手册中pixel size的含义及计算方式是什么?

关于libpng中"pixel size"的含义与计算方式

来自libpng官方文档:

如果您提前知晓图像尺寸和pixel size,可以在调用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);

但“pixel size”这一术语在libpng文档的其他地方均未提及,我想了解它的具体含义以及计算方式。


含义与计算方法

pixel size指单个像素在内存中占用的字节数,由图像的颜色类型和位深度共同决定,具体计算步骤如下:

  1. 确定每个像素的总位数:

    • 灰度图(PNG_COLOR_TYPE_GRAY):总位数 = 位深度
    • 灰度带Alpha通道(PNG_COLOR_TYPE_GRAY_ALPHA):总位数 = 位深度 × 2
    • 真彩色图(PNG_COLOR_TYPE_RGB):总位数 = 位深度 × 3
    • 真彩色带Alpha通道(PNG_COLOR_TYPE_RGB_ALPHA):总位数 = 位深度 × 4
    • 索引色图(PNG_COLOR_TYPE_PALETTE):总位数 = 位深度(每个像素对应调色板索引,占用位数由位深度指定)
  2. 将总位数转换为字节数:
    使用整数向上取整运算,公式为:pixel_size = (总位数 + 7) / 8

常见场景示例

  • 8位灰度图:(8 +7)/8 = 1 字节/像素
  • 24位真彩色图:(8×3 +7)/8 = 3 字节/像素
  • 32位RGBA图:(8×4 +7)/8 =4 字节/像素
  • 16位灰度带Alpha:(16×2 +7)/8 =4 字节/像素
  • 4位索引色图:(4 +7)/8 =1 字节/像素

更可靠的替代方式

手动计算容易出错,实际开发中可以直接调用libpng的png_get_rowbytes()函数获取每行的总字节数,再除以图像宽度得到pixel size:

png_uint_32 row_bytes = png_get_rowbytes(png_ptr, info_ptr);
int pixel_size = row_bytes / width;

内容的提问来源于stack exchange,提问作者Thomas Fritz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:52:36