PPM错误的颜色显示

时间:2020-05-27 15:31:55

标签: c++ file-format color-space ppm color-depth

显示PPM时,我得到奇怪的结果:

pixeldisplay

(实际上是升级的PNG)

文件的外观如下:

textdisplay

尺寸很好(10行8列),只是颜色是错误的(或者我错了吗?)。

正如文件第三行所说,我希望每个通道使用0到255之间的值。使用通常的rgb颜色空间,例如(255,255,255)表示白色,(0,0,0)表示黑色,(255,0,0)表示红色,依此类推。但是图像中的这些颜色显然与文件中的颜色不同。

乍一看,图像似乎很暗。

我会误解格式吗?文件不是这样解释的吗?

1 个答案:

答案 0 :(得分:0)

该文档:http://netpbm.sourceforge.net/doc/ppm.html描述了PPM图像格式。

在文件开头发现“魔术”值P6时,像素的颜色存储为二进制数据。引用前面提到的文档(重点是我的):

[...]高度行的栅格,从上到下依次排列。每行由宽度像素组成,按从左到右的顺序排列。每个像素依次是红色,绿色和蓝色样本的三元组。 每个样本均以1或2个字节的纯二进制形式表示。如果Maxval小于256,则为1个字节。否则为2个字节。最高有效字节在前。

询问者显示的文件似乎包含其十进制文本表示形式。

因此,字符串"\n224 93 229..."(是的,我怀疑Windows结束行序列"\r\n")被解释为(假设文件以ASCII格式保存){10, 50, 50}, {50, 32, 32}, {57, 51, 32}, ...

请注意中间的黑色像素,可能与第一行的末尾相对应,它可能是{13, 10, 32}"\r\n ")。

如果将魔幻值更改为P3,则应正确解释。