在android中创建缩放位图时保持图像质量
Posted
技术标签:
【中文标题】在android中创建缩放位图时保持图像质量【英文标题】:Maintaining Image quality when creating scaled bitmap in android 【发布时间】:2011-12-04 00:41:14 【问题描述】:我有一个尺寸为 960x800 的图像,我正在尝试让它填满屏幕。
我目前的做法是加载完整的 960x800 位图并使用源和目标 Rect
对象。到目前为止,我的目标矩形是 480x320(我的屏幕尺寸),源矩形是 960x800。
background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null);
destRect = new Rect(0,0, screenWidth, screenHeight);
sourceRect = new Rect(0,0, background.getWidth(), background.getHeight());
...
c.drawBitmap(background, sourceRect, destRect, backgroundPaint);
如果我在尝试画布背景时使用Paint
对象并将抖动设置为真,则图像看起来绝对完美。
Paint backgroundPaint = new Paint();
backgroundPaint .setDither(true);
我得出的结论是,这可能效率不高,导致每次绘制调用都需要做不必要的工作。为了解决这个问题,我想尝试执行以下操作:
background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null);
background = Bitmap.createScaledBitmap(background, display.getWidth(), display.getHeight(), true);
从而创建一个已经调整大小的位图,消除对任何Rect
对象的需求。但是,这样做时,我无法保持与上述方法相同的图像质量。事实上,如果我不使用上述方法使用Paint
对象,图像看起来类似于可以看到的图像。在缩放的位图上使用绘制对象似乎没有任何效果。
举个例子说明我的图片看起来如何,它类似于this图片(虽然没有那么严重)
我可以做些什么来获得相同的图像质量?
【问题讨论】:
【参考方案1】:如果您希望图像的宽度为 140,则此条件会自动调整高度的大小
Bitmap originalBitmap = BitmapFactory.decodeFile(getResources(), R.drawable.background, null);
Bitmap bitmap=originalBitmap;
if (bitmap !=null)
int h = bitmap.getHeight();
int w = bitmap.getWidth();
h = 140*h/w;
w = 140;
bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
setIconImage(bitmap);
【讨论】:
以上是关于在android中创建缩放位图时保持图像质量的主要内容,如果未能解决你的问题,请参考以下文章