在运行Android 4.0或4.0.3的模拟器上,我看到了可怕的色带问题,但似乎无法摆脱。在我测试过的其他所有Android版本中,渐变效果都很平滑。
我有一个SurfaceView,它被配置为RGBX_8888,并且在呈现画布时没有出现色带问题。如果我在渲染结束时通过叠加噪点来手动抖动图像,我可以使渐变效果再次变得平滑,但这会影响性能,而我不想这样做。
因此,色带问题是稍后引入的。我只能假设,在4.0+上,我的SurfaceView在绘制和显示之间的某个时刻被量化为更低的位深度,而从屏幕截图中可以看出,渐变效果每个通道都以8个值为步长,表明量化为555(而非565)。
我在Activity onCreate函数中添加了以下内容,但没有任何改善。
我有一个SurfaceView,它被配置为RGBX_8888,并且在呈现画布时没有出现色带问题。如果我在渲染结束时通过叠加噪点来手动抖动图像,我可以使渐变效果再次变得平滑,但这会影响性能,而我不想这样做。
因此,色带问题是稍后引入的。我只能假设,在4.0+上,我的SurfaceView在绘制和显示之间的某个时刻被量化为更低的位深度,而从屏幕截图中可以看出,渐变效果每个通道都以8个值为步长,表明量化为555(而非565)。
我在Activity onCreate函数中添加了以下内容,但没有任何改善。
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
我还尝试将上述内容放在onAttachedToWindow()中,但仍然没有变化。
(我相信在2.2及以上版本中,RGBA_8888是默认的窗口格式,因此明确设置该格式对4.0+没有影响也就不足为奇了。)
这就带来了一个问题,如果源是8888并且目标也是8888,那么是什么引入了量化/条带效应,并且为什么它只出现在4.0+上?
非常令人困惑。我想知道是否有人能够解决这个问题?