最小化位图的高度和宽度时,图像质量会失真

时间:2012-11-28 16:08:09

标签: android

我从互联网上下载了bitmap,现在我希望减少位图的高度和宽度而不会降低bitmap的质量。如何实现这一目标。

这是从互联网下载位图的方法。

URL url_1 = null;
try {
    url_1 = new URL(vmImageUrl);
    bmp = BitmapFactory.decodeStream(url_1.openConnection().getInputStream());
    } catch (Exception e) {
    Log.v("Error while downloading bitmap from url", e.getMessage());

我已经像这样缩放了。

Bitmap.createScaledBitmap(bmp, convertDpToPixel(140, context), convertDpToPixel(35, context), false);

此方法将dp单位转换为等效的设备特定值(以像素为单位)。

public static int convertDpToPixel(float dp,Context context)  
{
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    int px = (int) (dp * (metrics.densityDpi/160f));
    return px;
}

3 个答案:

答案 0 :(得分:0)

使用BitmapFactory.Options.inSampleSize获取更小的位图。

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(YOUR_FILE, opts);

答案 1 :(得分:0)

我设置了这个。

Bitmap.createScaledBitmap(bmp, convertDpToPixel(140, context), VirtualMirrorActivity.convertDpToPixel(35, context), true);

而不是

Bitmap.createScaledBitmap(bmp, convertDpToPixel(140, context), VirtualMirrorActivity.convertDpToPixel(35, context), false);

它给予更光滑的边缘和清除位图。现在工作正常..

答案 2 :(得分:-2)

你需要2个Rect,

Rect src = new Rect();
Rect dst = new Rect();

然后你可以为当前图像设置src,

src.set(0,0,imgWidth,imgHeigth);

然后是所需的尺寸

dst.set(startX,startY,endX,endY);

注意:startX和startY将是屏幕上的目标坐标 你的图像将被绘制到endX endY坐标。 并用画布绘制你的位男人

Canvas.drawBitmap(bitmapFile, src, dst, null);