将图像转换为位图并压缩

时间:2017-11-20 16:04:39

标签: android image bitmap compression out-of-memory

我有一个函数将图像转换为数组字节(将图像保存到数据库sqlite中)。我有一个问题,如何压缩图像,避免内存不足错误? 这是我的代码 提前谢谢。

public byte[] ConverttoArrayByte(ImageView img)
{
    try{
        BitmapDrawable bitmapDrawable = (BitmapDrawable) img.getDrawable();
        Bitmap bitmap = bitmapDrawable.getBitmap();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        return stream.toByteArray();
    }catch (NullPointerException e){
        Log.d("Tag", "Null");
       e.printStackTrace();
    }
   return null;
}

1 个答案:

答案 0 :(得分:0)

您可以尝试使用调整图像大小的小功能:

if ( req.body.remember ) 
{
    var oneWeek = 7 * 24 * 3600 * 1000; //1 weeks                    
    req.session.cookie.expires = new Date(Date.now() + oneWeek);
    req.session.cookie.maxAge = oneWeek; 
}

以这种方式public static Bitmap getResizedBitmap(Bitmap image, int maxSize) { int width = image.getWidth(); int height = image.getHeight(); float bitmapRatio = (float)width / (float) height; if (bitmapRatio > 1) { width = maxSize; height = (int) (width / bitmapRatio); } else { height = maxSize; width = (int) (height * bitmapRatio); } return Bitmap.createScaledBitmap(image, width, height, true); } 调用此函数以获取调整大小的位图。

然后,您可以使用Bitmap bitmap = GetAttachmentsUtils.getResizedBitmap(bitmap, maxSize);对其进行压缩,并执行您之前执行的相同操作。