美文网首页
图像撕裂的原因及解决方法

图像撕裂的原因及解决方法

作者: 卡布奇诺_95d2 | 来源:发表于2020-07-29 17:25 被阅读0次

1、什么是图像撕裂?
图像撕裂是指我们肉眼看见一张图片上下两层发生了错位,如下图所示:

image.png
2、为什么会发生图像撕裂?
GPU在渲染图片的时候,视频控制器是从帧缓冲区里面取数据,然后经过数模转换,最后将图片展现在显示上。正常情况是没有问题的,特殊情况是当GPU还没有将图片展现完成时,帧缓冲区数据已经更新为下一帧的数据,此时视频控制器只负责取出数据,它并不知道该数据已经被更新了,因此继续执行取数据,数模转化,展示图片的操作,此时,显示器上的图片就会表现为撕裂。
3、有什么办法可以解决图像撕裂?
苹果引入了:垂直同步Vsync + 双缓冲区DoubleBuffering的解决办法。
垂直同步Vsync:对帧缓冲区增加一个加锁的操作,不允许视频控制器在从缓冲区读取数据的过程中对帧缓冲区的数据进行修改。
双缓冲区DoubleBuffering:由于对帧缓冲区加锁了,如果只有一个帧缓冲区效率太低,因为每次都必须得上个缓冲区的数据被读取完成才对下一帧的数据进行处理。因此,可以采用双帧缓冲区来解决效率低的问题,视频控制器可以读取A缓冲区的数据,而处理数据可以在B缓冲区执行,当A缓冲区的数据被显示完成,视频控制器切换从B缓冲区中读取,而A缓冲区处理数据。
4、双缓冲区有什么弊端?
引入双缓冲区机制后,会有一个新的弊端,即:掉帧。
掉帧是指在屏幕上显示的是上一帧的数据,肉眼看到像是图像卡住了一样。
image.png
上图展示了掉帧形成的原因:每帧画面处理的时间约为16.7ms,上图第1个16.7ms内,CPU和GPU对数据处理完成,图像正常显示。在第2个16.7ms内,由于CPU和GPU处理数据的时间较长,导致16.7ms内视频控制器并没有将帧缓冲区的数据处理完成,当第3个16.7ms时,视频控制器处理的仍然是上一个帧缓冲区的数据,并没有进行缓冲区切换,此时出就现了掉帧的情况。
5、掉帧的情况是否可以避免?
目前,掉帧的情况不可以避免,只能对掉帧的情况进行优化,减少掉帧。可以引入三缓冲区的方案,但是即使引入了三缓冲区,也无法完全避免掉帧。

相关文章

  • 02-图像撕裂,掉帧及解决方法

    图像撕裂原因及解决方法 先说说图片显示的过程,CPU将图片解码,交给GPU -> GPU进行图像的渲染 -> 存储...

  • 图像撕裂的原因及解决方法

    1、什么是图像撕裂?图像撕裂是指我们肉眼看见一张图片上下两层发生了错位,如下图所示: 2、为什么会发生图像撕裂? ...

  • iOS图像撕裂及解决方法

    一、什么是图像撕裂? 就是一张图片在显示的时候出现断层情况,如图所示 二、为什么会出现图像撕裂? 屏幕成像过程 G...

  • iOS 图像撕裂及解决方法

    1.图像撕裂 1.1 图像显示过程 图像 -> CPU将图片解码,交给GPU -> GPU进行图像的渲染 -> 存...

  • iOS 性能优化之界面优化

    1.卡顿原理 图像撕裂及解决方法[https://www.jianshu.com/p/486b8a119ffc]和...

  • 2018-05-23

    uv打印机输出的图像不够亮原因及解决方法 uv打印机输出的图像不够亮原因有那些,解决方法有哪几种?在实际的印刷过程...

  • 2、图像撕裂问题及解决方法

    什么是图像撕裂 就是一张图片在显示的时候分成了两半,即出现断层。如下图: 图像撕裂是如何形成的呢 我们先从图像的显...

  • 图像撕裂、掉帧

    1 图像撕裂 图像撕裂就是一张图片显示的时候,出现了上下断层,如下图: 1.1 出现撕裂的原因 首先我们来看图像显...

  • 浅谈图像撕裂与掉帧产生的原因及解决办法

    1. 撕裂 1.1 产生原因 图像撕裂就是一张图片在显示的时候发生错位,产生断层,如下图所示:断层.png 图像的...

  • 图像撕裂问题及处理方法

    什么是图像撕裂? 即一张图出现了错位的现象,如下图: 那图像撕裂是如何形成的? 1. 图像的显示过程 图像 -> ...

网友评论

      本文标题:图像撕裂的原因及解决方法

      本文链接:https://www.haomeiwen.com/subject/jpqkrktx.html