在Android应用中更改位图分辨率

3

我正在开发一款使用手机相机拍照并在应用中使用的应用程序。但是,应用程序会因为位图分辨率过高导致内存不足。有没有办法使位图保持相同大小,但降低分辨率呢?

谢谢!

2个回答

5

您可以设置其宽度和高度

Bitmap bm = ShrinkBitmap(imagefile, 150, 150);

调用函数

Bitmap ShrinkBitmap(String file, int width, int height){

 BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
    bmpFactoryOptions.inJustDecodeBounds = true;
    Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);

    int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height);
    int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width);

    if (heightRatio > 1 || widthRatio > 1)
    {
     if (heightRatio > widthRatio)
     {
      bmpFactoryOptions.inSampleSize = heightRatio;
     } else {
      bmpFactoryOptions.inSampleSize = widthRatio; 
     }
    }

    bmpFactoryOptions.inJustDecodeBounds = false;
    bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
 return bitmap;
}

这里有两个链接可能对你有所帮助:链接1链接2


当我使用decodeResource选项获取位图时,这个方法是有效的。但是,当从获取图像意图中工作时,我会得到一个Uri并执行以下操作: Uri selectedImageUri = data.getData(); Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);在这种方式下,是否有一种方法可以调整大小? - n00b programmer

3
可以使用Options.inSampleSize来创建位图时进行操作。

那不是针对尺寸的吗?如果你只想改变分辨率而不改变尺寸怎么办? - Vic Torious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接