组合两个位图图像时出现空指针异常

Lal*_*ani 8 android

我正在使用一种方法来combine two Bitmap Images写入SDCard.该应用程序.在模拟器中工作得很好,但是当我尝试在Real Device上执行时,它会Null Pointer Exception通过这一行cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);来创建一个new Bitmap我将在其上绘制要使用的组合图像Canvas.

现在,这里combineImages(Bitmap background, Bitmap foreground)的第一个参数是Bitmap from CameraPicture和second is the forefround Gallery item.从相机拍摄的位图是一个static Bitmap,我想这是唯一让我遇到麻烦的事情.所以,可能有人给我一个很好的解决方案,以节省从拍摄的照片Camera作为temporary,使我没有任何进一步使用它的任何问题的存储.

public void combineImages(Bitmap background, Bitmap foreground) { 

        Bitmap cs = null;
        int width = 0, height = 0;
        width = background.getWidth();
        height = background.getHeight();
        cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas comboImage = new Canvas(cs);
        comboImage.drawBitmap(background, 0, 0, null);
        comboImage.drawBitmap(foreground, 100, 300, null);

        String tmpImg = String.valueOf(System.currentTimeMillis()) + ".png";
        OutputStream os = null;
        try {
            os = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + tmpImg);
            cs.compress(CompressFormat.PNG, 100, os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试使用Real Device时,这是我的Logcat输出.(LG Optimus Black P-970)

10-04 12:36:08.329: ERROR/AndroidRuntime(16356): FATAL EXCEPTION: main
10-04 12:36:08.329: ERROR/AndroidRuntime(16356): java.lang.NullPointerException
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.graphics.Bitmap.createBitmap(Bitmap.java:469)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at com.cam.GalleryImageSelected.combineImages(GalleryImageSelected.java:66)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at com.cam.GalleryImageSelected$1.onClick(GalleryImageSelected.java:90)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:874)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.widget.AdapterView.performItemClick(AdapterView.java:294)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.widget.ListView.performItemClick(ListView.java:3387)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2408)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.os.Handler.handleCallback(Handler.java:587)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.os.Looper.loop(Looper.java:123)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at java.lang.reflect.Method.invokeNative(Native Method)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at java.lang.reflect.Method.invoke(Method.java:521)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
10-04 12:36:08.329: ERROR/AndroidRuntime(16356):     at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

MKJ*_*ekh 6

我想问题可能是你通过从相机拍摄照片生成的位图的大小.所以,最好尝试使用Bitmap.createScaledBitmap()方法.

width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();

background = Bitmap.createScaledBitmap(background, width, height, true);
Run Code Online (Sandbox Code Playgroud)

这将根据设备高度 - 宽度的高度宽度缩放图像.希望这可以帮助.