有人告诉我,调用getWindow().setFormat(PixelFormat.XXXX);
时应将活动中窗口的像素格式设置为XXXX(例如RGBA_8888
)。我尝试在我的活动的onCreate方法中调用getWindow().setFormat(PixelFormat.XXXX);
,但无论我使用什么参数,都可以看到我显示的图像的特征没有区别。特别是我正在渲染一些包含在Android设备上显示banding的颜色细微变化的位图。但无论我使用什么PixelFormat(例如RGB_332
看起来都不差),我都无法使条带更好或更差。我强烈怀疑getWindow().setFormat(PixelFormat.XXXX);
根本没有任何影响 - 或者某些后续代码正在改变格式,例如当我创建画布时,?还是一个观点?或on 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乐队。
答案 0 :(得分:2)
我有一行
final SurfaceHolder holder = getHolder();
在我的代码中。然后我将其更改为
final SurfaceHolder holder = getHolder();
holder.setFormat(PixelFormat.RGBA_8888);
从那时起,一切都很美好(根本没有任何条带)。
答案 1 :(得分:0)
尝试将其添加到AndroidManifest.xml中以避免默认的RGB_565:
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />