有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在安卓中调整位图的大小

我得到一个空点异常。 为什么

private Bitmap changeDimens(int height,int width) {
        Bitmap bitmap=((BitmapDrawable)modified.getDrawable()).getBitmap().copy(Bitmap.Config.ARGB_8888,true);
        Matrix matrix = new Matrix();
        matrix.postScale(width, height);
        Bitmap bitmapEscaled=Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
        //bitmap.recycle();
        //Bitmap bitmapEscaled=Bitmap.createScaledBitmap(bitmap,width,height,true);
        return bitmapEscaled;
    }

我试图得到一个由参数给出尺寸的位图,并在这一行中得到一个空指针:

Bitmap bitmapEscaled=Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); 

在我的日志中:

java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.graphics.Bitmap.setHasAlpha(boolean)' on a null object reference

共 (2) 个答案

  1. # 1 楼答案

    有一件事看起来不对劲

    Matrix matrix = new Matrix(); 
    matrix.postScale(width, height);
    

    但是你的宽度和高度是整数。我猜它们是你想要的实际位图像素大小。这些是浮点值,它们与当前大小有关。所以如果你想让位图变大1/2,你可以使用

    matrix.postScale(0.5, 0.5);
    

    如果你想让它变大两倍

    matrix.postScale(2, 2);
    

    现在让我们假设你的宽度和高度是一些大小值,比如200。然后这一行将创建一个宽200倍、高200倍的位图,创建位图肯定会因内存不足而失败。如果传入的值小于1,则整数值将为0,并且将得到一个零大小的位图

  2. # 2 楼答案

    不确定是否需要以这种方式创建位图副本。 如果适合您的需要,您可以尝试以下片段:

    public static Bitmap getResizedBitmap(Bitmap source, int toWidth, int toHeight) {
            int width = source.getWidth();
            int height = source.getHeight();
            float scaleWidth = ((float) toWidth) / width;
            float scaleHeight = ((float) toHeight) / height;
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);
            return Bitmap.createBitmap(source, 0, 0, toWidth, toHeight, matrix, false);
        }