设置PixelFormat

时间:2014-01-10 18:52:57

标签: android

有人告诉我,调用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的红绿蓝扫描。生成的图像在这里

enter image description here

红色和蓝色似乎有32个色带,绿色有64个色带...这意味着屏幕格式为红色和蓝色各5位,绿色6位 - 对我来说看起来像“RGB_565”。然后我尝试了getWindow()。setFormat(PixelFormat.RGBA8888);早在onCreate并没有任何区别 - 仍然是32/64乐队。

2 个答案:

答案 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" />