在android中创建缩放位图时保持图像质量

时间:2011-12-04 00:41:15

标签: android image bitmap

我有一个尺寸为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对象并在将背景设置为画布时将抖动设置为true,则图像看起来绝对完美。

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 个答案:

答案 0 :(得分:0)

这是条件,如果您希望图像的宽度为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);
    }