[剥离标题字节并解压缩像素值后,PNG文件为我们留下了一组行(图像的水平条高一个像素)。
每行以一个字节开头,指定要使用的过滤器,后跟RGB值:
+-----+-----+-----+-----+-----+-----+-----+
| 0:F | 1:R | 2:G | 3:B | 4:R | 5:G | 6:B | // end of first row in image
+-----+-----+-----+-----+-----+-----+-----+
| 7:F | 8:R | 9:G |10:B |11:R |12:G |13:B | // end of second row
+-----+-----+-----+-----+-----+-----+-----+
在没有过滤字节的图像中,我可以将索引除以3(因为每个RGB像素有3个值,然后使用这些公式来获取该像素的x / y位置:
x = index % width
y = index / width
但是过滤字节使我失望!给定红色像素的字节索引,如何获得像素的x / y位置? (如上所示,在字节4或字节11处说。)
我尝试了各种排列,但我认为必须有一个优雅的解决方案!
基于@ usr2564301的评论,我认为这可以正常工作:
y = ((index-1) / 3) / width
x = ((index-y) / 3) % width
width
是图像的宽度,以像素为单位,而不是字节行的宽度。
我们从y
中减去index
,因为每一行都有一个过滤器字节,我们需要将它们全部删除才能获得x
位置。
或者,y
可以使用:]
y = index / row_width
row_width
是每行的字节数:RGB
为三,而过滤器字节为图像宽度的一倍。