首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >垂直翻转PVRTC压缩图像数据

垂直翻转PVRTC压缩图像数据
EN

Stack Overflow用户
提问于 2012-10-21 12:00:26
回答 1查看 568关注 0票数 1

我有一些PVRTC 4bpp的图像数据,需要在没有解压的情况下进行垂直翻转。我写的代码大部分都正常工作,但flip目前引入了一些小的人工制品,我不确定确切的原因。

PVRTC翻转代码首先将8字节的4x4压缩块移动到由PowerVR SDK中PVRTDecompress.cpp的TwiddleUV()函数计算出的翻转位置。这部分似乎是正确的。

其次,代码遍历所有8字节压缩块,颠倒包含存储在2bpp中的4x4调制数据的第二个4字节的顺序。块的前4个字节包含保持不变的颜色数据。

这似乎非常接近正确,但它在翻转的图像中留下了原始图像中没有的小伪影,主要表现为小的灰色水平线。如果翻转代码运行两次,那么伪影就会消失,图像与原始图像保持不变。

有PVRTC经验的人能解释一下还需要做些什么来翻转压缩的图像数据吗?我认为问题可能与调制数据的翻转有关,但是我在PVRTC文档中的探索在这个阶段还没有得到答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-21 20:31:29

为了更容易理解,您需要了解PVRTC解码数据的方式,因为它与基于块的方案(如ETC1或S3TC/DXTC )略有不同。为了简单起见,我将只描述4bpp的变体。

PVRTC由两个低分辨率15/16bpp图像A和B组成,这两个图像的分辨率是最终纹理的1/4 * 1/4,以及一个全分辨率但2bpp的调制图像。为了“逻辑地”解码纹理元素XY,A和B图像被提前放大到目标分辨率,然后根据调制图像中的像素混合得到的颜色Axy和Bxy。为了在硬件上简化解码,将A和B图像与调制数据以1像素的速率交织成64位字,其中来自调制数据的每个图像有16个像素。

现在,它不能精确翻转的原因是因为4x4双线性放大比例稍微偏离了4x4纹理元素的中心(我认为原因在Graphics Hardware 2003论文linked from wikipedia中有描述)。我想你唯一能做的就是评估每个像素,然后在做完双线性颜色的翻转之后,计算出四种可能性中哪一种实际上是最接近的。在某种程度上,这将是一个重新压缩,但它应该是相对较快的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12994863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档