我有一些 PVRTC 4bpp 图像数据需要在不解压缩的情况下就地垂直翻转。我编写的代码大部分都在工作,但翻页目前引入了小伪影,我不确定究竟是为什么。
PVRTC 翻转代码首先将 8 字节 4x4 压缩块移动到其翻转位置,该位置由 PowerVR SDK 中 PVRTDecompress.cpp 中的 TwiddleUV() 函数计算得出。这部分似乎是正确的。
其次,代码遍历所有 8 字节压缩块,颠倒第二个 4 字节的顺序,其中包含以 2bpp 存储的 4x4 调制数据。块的前 4 个字节包含保持不变的颜色数据。
这似乎非常接近正确,但它在翻转的图像中留下了原始图像中不存在的小伪影,并且主要表现为小的灰色水平线。如果翻转代码运行两次,则伪影消失并且图像与原始图像保持不变。
任何有 PVRTC 经验的人都可以解释翻转压缩图像数据还需要做什么吗?我认为问题可能与调制数据的翻转有关,但我对 PVRTC 文档的尝试在现阶段还没有得到答案。