什么是iDOT块?

13

我拍摄了一张在运行OS X 10.11的MacBook Pro Retina显示器上截屏的截图,发现其中包含以下块:

IHDR, iCCP, pHYs, iTXt, iDOT, IDAT…, IEND

以下所有内容都是2003规范的一部分,除了iDOT,它只是一个小的(28字节)块。根据块命名约定,它的第二个字母大写应该表示它是具有公共规范的块。但我还没有找到它的规范。它也没有列在公共PNG块和关键字注册表,版本1.4.6中,尽管那似乎是最新版本
网络上有很多网站提到这个块,包括许多Stack Overflow上的网站。大多数描述的是类似于错误消息的内容。
ImageIO: PNG invalid PNG file: iDOT doesn't point to valid IDAT chunk

那些得到解决的问题发现了某种图像损坏,不一定是由于这个数据块,或者应用了某种转换,可能也删除了这个数据块。

许多页面还提到了Retina显示屏。我猜测并希望这个数据块以某种方式指示了截屏时生效的显示密度。这对于自动缩放截图将非常有用。

编辑:拍摄更多截图后,我发现像素密度似乎确实起了作用:在原生分辨率下运行时,我没有这样的数据块,并且在拍摄时显示的图像尺寸。只有在更高的密度下才会出现此数据块和PNG图像大小是显示尺寸的整数倍。这28字节的数据似乎表示7个小端32位整数。对我来说,它们是(2, 0, h, 40, h, h, x),其中2可能表示像素密度,h是表面上的图像高度(即存储的一半),而x是我完全不理解的某个数字。我不知道如何将分数像素密度纳入这个游戏中。

我该在哪里找到这个块的详细信息甚至规格?我需要联系苹果公司或注册机构吗,还是这里有人可以提供更多细节?


4
我确认 "iDOT" 不是一个已注册的 PNG 块。 - Glenn Randers-Pehrson
1
也许与CgBI PNG有关。它们包含与有效PNG文件中不同的IDAT。 - Glenn Randers-Pehrson
5
根据块命名惯例,其第二个字母大写应表明这是一个具有公共规范的块。这又是苹果滥用开放标准的案例。 - leonbloy
2
@Crissov:我同意在png列表上询问不太可能获得新信息。苹果开发者论坛的帖子一直没有答复。我正在想办法向苹果升级此问题。但我不知道是否有任何适当的苹果渠道。也许我应该申请自己不兼容的“iDOT”块变体,以显示苹果遵循注册程序的重要性。虽然这听起来有些荒谬。 - MvG
3
这篇博客文章成功地对这个块的一些数据进行了逆向工程:https://www.hackerfactor.com/blog/index.php?/archives/895-Connecting-the-iDOTs.html。作者甚至提到了这个问题。 - Hendrik
显示剩余3条评论
1个回答

2
正如Hendrik在评论中所写的,https://www.hackerfactor.com/blog/index.php?/archives/895-Connecting-the-iDOTs.html 已经反向工程了这个块的目的。它包含一个偏移量,指向编码图像数据中的一个明确定义位置。紧接着是冲洗操作,因此解压缩器状态被重置,并且恰好位于IDAT块边界上,在图像高度一半的已知像素位置。
其目的是允许在多核处理器上并行解码图像数据。这个目标最近(2021-12-01)在该页面的一条评论中得到了确认。虽然这条评论还远离官方,但在这个问题上它是目前我能找到的最有权威性的评论。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接