如何成功升级位图?

时间:2018-01-01 20:01:18

标签: java android bitmap android-bitmap

我正在使用createBitmap重新创建一个放大的图片,但收到以下错误信息。

Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference 

使用createScaledBitmap时出现内存不足错误。我尝试过其他论坛的可能解决方案,但没有运气。

public Bitmap scaleToActualAspectRatio(Bitmap bitmap) {

        Bitmap newbitmap = null;

try {
        Matrix matrix = new Matrix();
        matrix.postScale(scaledWidth, scaledHeight);

        newbitmap = Bitmap.createBitmap(bitmap, 0, 0, scaledWidth, scaledHeight, matrix, false);
                    //bitmap.recycle();

                } catch(Exception e) {
                    e.printStackTrace();
                }

return newbitmap;
    }

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我希望这个函数适合你,还有一个想法比例值浮动在这里,你传递所需位图的高度和宽度。仔细阅读评论。

public Bitmap scaleToActualAspectRatio(Bitmap bitmap) {

            Bitmap newBitmap = null;

            try {

                //width = 500 and height = 500
                int width = bitmap.getWidth();
                int height = bitmap.getHeight();
                int newWidth = 1200;
                int newHeight = 1200;

                // calculate the scale - in this case = 2.4f
                float scaleWidth = ((float) newWidth) / width;
                float scaleHeight = ((float) newHeight) / height;

                // create matrix for the manipulation
                Matrix matrix = new Matrix();

                // resize the bit map 2.4f, 2.4f
                matrix.postScale(scaleWidth, scaleHeight);

                // recreate the new Bitmap
                newBitmap = Bitmap.createBitmap(bitmap, 0, 0, newWidth, newHeight, matrix, true);

            } catch (Exception e) {
                e.printStackTrace();
            }

            return newBitmap;
        }