【问题标题】:Setting the PixelFormat设置像素格式
【发布时间】:2014-01-10 18:52:56
【问题描述】:

有人告诉我调用getWindow().setFormat(PixelFormat.XXXX); 应该将活动中窗口的像素格式设置为XXXX(例如RGBA_8888)。我曾尝试在我的活动的 onCreate 方法中调用getWindow().setFormat(PixelFormat.XXXX);,但无论我使用什么参数,都可以看到我显示的图像的特征没有任何差异。特别是,我正在渲染一些包含细微颜色变化的位图,这些变化已在 android 设备上显示banding。但是,无论我使用什么 PixelFormat,我都不能使条带变得更好或更糟(例如,RGB_332 看起来并不差)。我强烈怀疑getWindow().setFormat(PixelFormat.XXXX); 根本没有任何效果 - 或者某些后续代码正在改变格式,例如当我创建画布时,?还是观点?还是 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 波段。

【问题讨论】:

  • 在编译时进行了一些编辑。请将图像放入/res/raw/ 并从那里显示。检查这是否是罪魁祸首。另外,this.
  • 我猜你的意思是 bin/res ? ...如果是这样,我可以确认在我的 PC 上查看时,那里的 png 看起来非常平滑(没有条纹)。

标签: android


【解决方案1】:

我有电话

final SurfaceHolder holder = getHolder();

在我的代码中。然后我将其更改为

final SurfaceHolder holder = getHolder();
holder.setFormat(PixelFormat.RGBA_8888);

从那时起,一切都运行良好(完全没有条纹)。

【讨论】:

  • 疯狂这仍然不是表面视图的默认模式,而一切都是如此。感谢您指出这一点!!!
【解决方案2】:

尝试将此添加到您的 AndroidManifest.xml 以避免默认的 RGB_565:

<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多