获取PNG文件中像素的X / Y位置

问题描述 投票:0回答:1

[剥离标题字节并解压缩像素值后,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处说。)

我尝试了各种排列,但我认为必须有一个优雅的解决方案!

image png pixel
1个回答
1
投票

基于@ usr2564301的评论,我认为这可以正常工作:

y = ((index-1) / 3) / width
x = ((index-y) / 3) % width

width是图像的宽度,以像素为单位,而不是字节行的宽度。

我们从y中减去index,因为每一行都有一个过滤器字节,我们需要将它们全部删除才能获得x位置。

或者,y可以使用:]

y = index / row_width

row_width是每行的字节数:RGB为三,而过滤器字节为图像宽度的一倍。

© www.soinside.com 2019 - 2024. All rights reserved.