有人告诉我,调用 getWindow().setFormat(PixelFormat.XXXX);
应将 Activity 中窗口的像素格式设置为 XXXX(例如 RGBA_8888
)。我尝试在 Activity 的 onCreate 方法中调用 getWindow().setFormat(PixelFormat.XXXX);
,但无论我使用什么参数,所显示图像的特征都没有差异。特别是,我正在渲染一些包含颜色细微变化的位图,这些颜色已显示 banding在 Android 设备上。但无论我使用什么 PixelFormat,我都无法使 strip 变得更好或更差(例如 RGB_332
看起来并没有更差)。我强烈怀疑 getWindow().setFormat(PixelFormat.XXXX);
根本没有任何效果 - 或者某些后续代码以某种方式更改格式,例如当我创建 Canvas 时,?或者一个 View ?或者在 onResume 上??
当我在开发 PC(32 位图形)上查看位图的 png 时,我可以确认没有条纹。
编辑:我刚刚添加了一些测试代码来在屏幕上绘制一组细线(canvas.drawLine(x,y,x2,y2,paint);
) 其中油漆分别具有从 0 到 255 的红绿蓝扫描。生成的图像在这里
红色和蓝色似乎有 32 个色带,绿色有 64 个色带...这意味着屏幕格式为红色和蓝色各 5 位,绿色为 6 位 - 对我来说看起来像“RGB_565”。然后我尝试了 getWindow().setFormat(PixelFormat.RGBA8888);在 onCreate 的早期,没有什么区别 - 仍然是 32/64 频段。
最佳答案
我有这条线
final SurfaceHolder holder = getHolder();
在我的代码中。然后我将其更改为
final SurfaceHolder holder = getHolder();
holder.setFormat(PixelFormat.RGBA_8888);
从那时起,一切都很顺利(完全没有 strip )。
关于android - 设置像素格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052146/