【发布时间】:2020-02-12 07:47:36
【问题描述】:
在去除标题字节并解压缩像素值后,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 像素有三个值),然后使用这些公式来获得该像素的 x/y 位置:
x = index % width
y = index / width
但是过滤器字节让我失望!给定红色像素的字节索引,如何获得像素的 x/y 位置? (比如在第 4 字节或第 11 字节,如上所示。)
我尝试了各种排列方式,但我认为一定有一个优雅的解决方案!
【问题讨论】:
-
您必须根据过滤器处理每一行,但完成后您可以将其丢弃。
-
@usr2564301 - 是的,但我仍然需要一种方法来了解特定像素在图像中的位置。我可以在图像解码时继续计数,但我想知道任意像素的 x/y 位置
-
我本来打算用很长的答案解释
stride,但您似乎只漏掉了一件事。 在除以 3 之前,从该起始值中减去 1。就这些了。 -
@usr2564301 – 我觉得我以前尝试过,但可能做得不对。那不会丢掉x坐标吗?我对 stride 一无所知,所以我欢迎更多信息!
-
谢谢@usr2564301 - 我在这方面做了更多工作,我认为你是正确的。我将此作为答案发布在下面,但如果您能验证这对您来说是否合适,那就太好了?