如何确定 XPM(X PixMap)图像格式的每通道位数?

如何确定 XPM(X PixMap)图像格式的每通道位数?

看看XPM(X PixMap)图像格式,我没有看到任何地方指定每个通道的位数(或者说,可能的颜色数)。在我的 Ubuntu 系统上四处查看,我看到了许多 XPM 文件的示例,其中大多数每个通道有 8 位(R、G、B 为 24 位),但有些每个颜色有 16 位(R、G、B 为 48 位)。

例如,这是teapot.xpm与 XFig 应用程序打包在一起的第一部分:

/* XPM */
static char * teapot_xpm[] = {
"234 149 34 1",
"   c #FFFFFFFFFFFF",
".  c #FFFF9191AAAA",
"X  c #DADA9191AAAA",
"o  c #FFFFB6B6AAAA",
"O  c #FFFFB6B6FFFF",

ETC。

除了检查十六进制数并计算它们占用的字符数之外,还有其他方法可以确定每个通道的位数吗?

答案1

例如,您可以使用图像魔术师identify效用如下:

identify -verbose teapot.xpm

例如,输出如下:

  Channel depth:
    Red: 8-bit
    Green: 8-bit
    Blue: 2-bit

然后您可以使用 grep 之类的实用程序进行处理,例如仅提取数字。

答案2

对于如何确定 XPM 图像中的颜色深度这个具体问题的答案似乎只能通过检查颜色表中的条目来完成。

请参阅我在 ImageMagick 项目问题中提出的问题的答复:https://github.com/ImageMagick/ImageMagick/discussions/6921#discussioncomment-7768171

引用用户 snibgo 的话:

色彩中隐含着深度。

xpm.c 函数 ReadXPMImage() 调用 color.c 中的 QueryColorCompliance() 来设置调色板中的每个条目。当颜色以 # 开头时,该函数会计算十六进制数字的数量 n,并设置深度=4*(n/4) EDIT 或深度=4*(n/3)。深度在 PixelInfo *color 参数中返回,ReadXPMImage() 将这些参数中的最大值设置为 image->depth。其他颜色的深度为 8。

相关内容