Home:ALL Converter>outofmemoryerror while making bitmap

outofmemoryerror while making bitmap

Ask Time:2013-05-20T14:26:40         Author:whitebear

Json Formatter

I am making the camer application which can composite the camera preview and png.

I would like to save the images in onPictureTaken callback

my source is below

    public void onPictureTaken(byte[] data, Camera camera) {

            //preview from camera
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 

            // overlay image 
            Bitmap overlayBmp = overlay.getDrawingCache(); 

            //blank beatmap 
            Bitmap blankBitmap = 
            Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), 
            Bitmap.Config.ARGB_8888); 

            //make canvas
            Canvas canvas = new Canvas(blankBitmap); 

            //composite image
            canvas.drawBitmap(bitmap, null,new Rect(0, 0, bitmap.getWidth(), 
    bitmap.getHeight()), null); 
            canvas.drawBitmap(overlayBmp, null,new Rect(0, 0, bitmap.getWidth(), 
    bitmap.getHeight()), null); 

However it shows outofmemoryerror,how can I solve this problem..?

05-20 15:13:49.114: E/AndroidRuntime(31647): FATAL EXCEPTION: main
05-20 15:13:49.114: E/AndroidRuntime(31647): java.lang.OutOfMemoryError
05-20 15:13:49.114: E/AndroidRuntime(31647):    at android.graphics.Bitmap.nativeCreate(Native Method)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at android.graphics.Bitmap.createBitmap(Bitmap.java:585)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at com.example.firstcameraappli.MainActivity$2.onPictureTaken(MainActivity.java:103)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at android.hardware.Camera$EventHandler.handleMessage(Camera.java:750)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at      android.os.Looper.loop(Looper.java:137)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at android.app.ActivityThread.main(ActivityThread.java:4514)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at java.lang.reflect.Method.invokeNative(Native Method)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at java.lang.reflect.Method.invoke(Method.java:511)
05-20 15:13:49.114: E/AndroidRuntime(31647):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)

Author:whitebear,eproduced under the CC 4.0 BY-SA copyright license with a link to the original source and this disclaimer.
Link to original article:https://stackoverflow.com/questions/16643747/outofmemoryerror-while-making-bitmap
Anup Cowkur :

This is a well known issue on Android. The problem is that manipulating bitmaps requires more memory than is available in most devices. You can use certain tricks however. Some discussions and solutions to help you:\n\n\nStrange out of memory issue while loading an image to a Bitmap object\nhttp://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html\njava.lang.OutOfMemoryError: bitmap size exceeds VM budget - Android\nOutofMemoryError: bitmap size exceeds VM budget (Android)\n",
2013-05-20T06:30:43
Mr.Sandy :

Try this code....\n\nPictureCallback myPictureCallback_JPG = new PictureCallback()\n{\n\n @Override\n public void onPictureTaken(byte[] data, Camera arg1) {\n\n BitmapFactory.Options opt;\n\n opt = new BitmapFactory.Options();\n opt.inTempStorage = new byte[16 * 1024];\n Parameters parameters = arg1.getParameters();\n Size size = parameters.getPictureSize();\n\n int height11 = size.height;\n int width11 = size.width;\n float mb = (width11 * height11) / 1024000;\n\n if (mb > 4f)\n opt.inSampleSize = 4;\n else if (mb > 3f)\n opt.inSampleSize = 2;\n\n //preview from camera\n Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,opt); \n\n\n }\n}\n\n\nget image in bitmap then you use as per your requirements.",
2013-05-20T06:36:55
yy