我遇到Android图形问题。我正在进行游戏开发,需要显示一些具有颜色渐变的图像。我的问题是,当我用渐变加载位图图像(以png格式)时,图像会显示带状伪像。这是在Android 4上。我研究了许多与此问题相关的帖子,并尝试了许多解决方案,包括:
在输入上抖动图像
BitmapFactory.Options factoryOptions =
new BitmapFactory.Options();
factoryOptions.inDither = true;
...
background = BitmapFactory.decodeResource( resources, R.drawable.game_page_background, factoryOptions );
从“res / raw”而不是“res / drawable”加载图像
验证我的显示器的像素格式为:位图配置ARGB_8888
使用输入流从资源目录加载图像。
我认为解决方案2和4应该已经阻止了Android图像“优化”(我再次假设)正在生成工件。但是这些解决方案都不起作用。无论我如何加载位图,工件仍然存在。最后,我不得不做一个可怕的解决方法,即使用photoshop将噪音烘焙到图像中。显然,这是一个可怕的解决方法。
来自这个社区的任何人都可以提供任何进一步的建议,了解如何使用渐变来获取位图图像,以便在Android中平滑渲染而不会出现条带制品吗?
以下代码碎片显示我是如何生成这些测试图像的......
CODE FRAG **
...
InputStream is = null;
try
{
is = ((Activity)gameMngr).getAssets().open("test_background_3.png");
}
catch( IOException ioe)
{
Log.d(TAG, "TEST CODE: Unable to open resources. ");
}
this.background = BitmapFactory.decodeStream(is);
...
// ELSEWHERE
...
canvas.drawBitmap( this.background, 0, 0, null );
...
END FRAG **
答案 0 :(得分:0)
我认为您可以创建from decodeStream的副本并指定Bitmap COnfig 以下是您修改后的代码片段:
InputStream is = null;
try
{
is = ((Activity)gameMngr).getAssets().open("test_background_3.png");
}
catch( IOException ioe)
{
Log.d(TAG, "TEST CODE: Unable to open resources. ");
}
this.background = BitmapFactory.decodeStream(is);
//create copy and specify the config of the bitmap, setting to true make the bitmap
//mutable.
Bitmap newBtmp = this.background.copy(Bitmap.Config.ARGB_8888, true);
//use the newBtmp object
canvas.drawBitmap( newBtmp, 0, 0, null );
...
如果这篇文章对您有所帮助,请将此帖作为答案。
感谢。