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