【问题标题】:What is the iDOT chunk什么是 iDOT 块
【发布时间】:2016-02-26 23:03:57
【问题描述】:

查看我在配备 Retina 显示屏并运行 OS X 10.11 的 MacBook Pro 上截取的屏幕截图,我发现它包含这些块:

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

所有这些都是the 2003 spec 的一部分,除了iDOT 是一个小的(28 字节)块。根据chunk naming conventions,它的第二个字母是大写的事实应该表明它是一个具有公共规范的块。不过,我在任何地方都找不到它的规格。它也没有在Register of public PNG chunks and keywords, Version 1.4.6 中列出,尽管它似乎是the latest version

网络上有很多网站都提到了这个块,包括 Stack Overflow 上的很多网站。大多数都在描述错误消息

ImageIO: PNG invalid PNG file: iDOT doesn't point to valid IDAT chunk

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

许多页面还提到了 Retina 显示屏。这是我的猜测,并希望这个块以某种方式指示截屏时有效的显示密度。这对automatic scaling of screenshots 非常有用。

编辑: 再拍一些截图,我发现像素密度确实起到了一定的作用:以原始分辨率运行显示器我没有得到这样的块,并且图像尺寸如图所示截屏。只有在更高的密度下,我才能获得块和 PNG 图像大小,它是显示的整数倍。 28 个字节的数据似乎代表了 7 个 little-endian 32 位整数。对我来说,这些是(2, 0, h, 40, h, h, x),其中2 大概表示像素密度,h 是表观图像高度(即实际存储的高度的一半),x 是一些我根本不明白的数字。我不知道分数像素密度会如何进入这个游戏。

在哪里可以找到该块的详细信息甚至规范?我是否必须联系 Apple 或注册表,或者这里有人可以提供更多详细信息?

【问题讨论】:

  • 我确认“iDOT”不是已注册的 PNG 块。
  • 也许它与 CgBI PNG 有关。它们包含的 IDAT 与有效 PNG 文件中的 IDAT 不同。
  • “根据块命名约定,它的第二个字母是大写的事实应该表明它是具有公共规范的块”Apple滥用开放标准的另一个案例。
  • @Crissov:我同意在 png 列表上询问不太可能产生新信息。苹果开发者论坛的帖子仍未得到答复。我正在尝试想办法通过 Apple 将其升级。不过,我不知道任何合适的 Apple 渠道。也许我应该申请我自己的不兼容的 iDOT 块变体,只是为了向 Apple 展示遵循注册程序的意义。不过,这似乎有些荒谬。
  • 这篇博文能够对这个chunk的一些数据进行逆向工程:hackerfactor.com/blog/index.php?/archives/…作者甚至提到了这个问题。

标签: ios macos png retina-display file-format


【解决方案1】:

正如 Hendrik 在评论中所写,https://www.hackerfactor.com/blog/index.php?/archives/895-Connecting-the-iDOTs.html 已经对这个块的目的进行了逆向工程。它包含到编码图像数据中明确定义的位置的偏移量。在刷新之后,解压器状态被重置,并且在 IDAT 块边界处,并且在图像高度的一半处具有已知像素位置。

这样做的目的是允许在多核处理器上并行解码图像数据。这个目标最近(2021-12-01)在该页面上的评论中得到了确认,该评论来自参与实施的人员。这条评论虽然离官方还很远,但到目前为止我能找到关于这个问题的最权威的评论吗?

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2020-04-12
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多