如何在android中重新缩放位图文件?

如何在android中重新缩放位图文件?,android,decode,bitmapimage,bitmapfactory,Android,Decode,Bitmapimage,Bitmapfactory,我目前有一个解码位图的方法,以优化图像文件的大小,但输入文件将不会是位图,并将解码为位图后。所以我的问题是,如果我的输入已经是位图,我如何调整它的大小?谢谢 private Bitmap compressFile(File f) { int REQUIRED_SIZE = 80; try { // decode image size BitmapFactory.Options o = new BitmapFactory.Options();

我目前有一个解码位图的方法,以优化图像文件的大小,但输入文件将不会是位图,并将解码为位图后。所以我的问题是,如果我的输入已经是位图,我如何调整它的大小?谢谢

private Bitmap compressFile(File f) {
    int REQUIRED_SIZE = 80;
    try {
        // decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth;// , height_tmp = o.outHeight;
        int scale = 1;
        while (REQUIRED_SIZE > 0) {
            if (width_tmp <= REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            // height_tmp /= 2;
            scale++;
        }

        // decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {
    }
    return null;
}
专用位图压缩文件(文件f){
所需的int_大小=80;
试一试{
//解码图像大小
BitmapFactory.Options o=新的BitmapFactory.Options();
o、 inJustDecodeBounds=true;
解码流(新的FileInputStream(f),null,o);
//找到正确的刻度值。它应该是2的幂。
内部宽度=o.outWidth;//,高度=o.outHeight;
int标度=1;
while(所需大小>0){
如果(宽度)tmp您也可以使用此选项

Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));
或者你是在要求:

bitmap.compress(Bitmap.CompressFormat.PNG, quality, outStream);

查看更多信息

您是从internet加载图像还是从gallery中选择?这将导致高分辨率图像的outOfMemory错误