0

This code crashes. Why?

@Override
    protected String doInBackground(String... params) {

        try {
            image_compress = image_compress(changed_image);

            array_image.add(Effects_change.doColorFilter((image_compress), 0,
                    1, 0));
            array_image.add(Effects_change.doColorFilter((image_compress), 0,
                    0, 1));


            array_image.add(Effects_change.doColorFilter((image_compress), 0,
                    1.2, 1.8));

            array_image.add(Effects_change.doGreyscale(image_compress));
            array_image.add(Effects_change.doGamma((image_compress), 0.8, 0.8,
                    0.8));
            array_image.add(Effects_change.doGamma((image_compress), 1.8, 1.8,
                    1.8));
            array_image.add(Effects_change.doColorFilter((image_compress), 1.0,
                    0, 0));

            array_image.add(Effects_change.doColorFilter((image_compress), 0.5,
                    0.5, 0.5));
            array_image.add(Effects_change.doColorFilter((image_compress), 1.5,
                    1.5, 1.5));


            array_image.add(Effects_change.createSepiaToningEffect(
                    (image_compress), 100, 1.5, 0.6, 0.12));
            array_image.add(Effects_change.createSepiaToningEffect(
                    (image_compress), 100, 0.88, 1.45, 1.43));

            array_image.add(Effects_change.createSepiaToningEffect(
                    (image_compress), 100, 1.2, 0.87, 1.8));
            array_image.add(Effects_change.decreaseColorDepth((image_compress),
                    32));

            array_image.add(Effects_change.decreaseColorDepth((image_compress),
                    120));

            array_image.add(Effects_change.applyReflection(image_compress));
            //array_image.add(Effects_change.applynewReflection(image_compress));
            array_image.add(Effects_change.applyFleaEffect(image_compress));

            array_image.add(Effects_change.sharpen((image_compress), 15));



            array_image.add(Effects_change.createSepiaToningEffect(
                    (image_compress), 200, 0.50, 0.6, 0.20));
            array_image.add(Effects_change.createSepiaToningEffect(
                    (image_compress), 150, 1.2, 0.97, 2.1));

            array_image.add(Effects_change.applyGaussianBlur(image_compress));
            array_image.add(Effects_change.applyBlackFilter(image_compress));
            array_image.add(Effects_change.applyMeanRemoval(image_compress));

            array_image.add(Effects_change.applySnowEffect(image_compress));

            array_image.add(Effects_change.smooth((image_compress), 8));
            array_image.add(Effects_change.CharcoalEffect(image_compress));

            array_image.add(Effects_change.tintImage((image_compress), 80));
            array_image.add(Effects_change.roundCorner((image_compress), 45));

            array_image.add(Effects_change.boost((image_compress), 1,
                    (float) 1.5));
            array_image.add(Effects_change.boost((image_compress), 2,
                    (float) 0.30));
            array_image.add(Effects_change.boost((image_compress), 3,
                    (float) 0.67));
            array_image.add(Effects_change.emboss(image_compress));

            array_image.add(Effects_change.boost((image_compress), 1,
                    (float) .50));

            array_image.add(Effects_change.boost((image_compress), 2,
                    (float) 0.10));
            array_image.add(Effects_change.boost((image_compress), 3,
                    (float) 1.5));
            array_image.add(Effects_change.engrave(image_compress));
            array_image.add(Effects_change.applyHueFilter((image_compress), 3));

            array_image.add(Effects_change
                    .changeToNegativeEffect(image_compress));
            array_image.add(Effects_change.SketchImage(image_compress));

            array_image.add(Effects_change.doColorFilter(image_compress, 1.8, 1.2, 1));


            array_image.add(Effects_change.tintImage((image_compress), 180));

            array_image.add(Effects_change.applySaturationFilter(image_compress, 2));

            array_image.add(Effects_change.createContrast(image_compress, 100));

            array_image.add(Effects_change.applySaturationFilter((image_compress), 90));
            // array_image.add(Effects_change.posterize(image_compress, 10));

            // setProgress(""+(int)((total*100)/lenghtOfFile));

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //array_image.add(Effects_change.setSepiaColorFilter(image_compress));

        return null;
    }

    @Override
    public void onPostExecute(String result) {
        super.onPostExecute(result);

        g.setAdapter(new ImageAdapter(Image_add_effects.this));
        g.setOnItemSelectedListener(Image_add_effects.this);

        try {
            pb.dismiss();
            pb=null;
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}

This is the log

04-07 22:36:08.450: W/dalvikvm(18429): threadid=13: thread exiting with uncaught exception(group=0x41fe82a0)
04-07 22:36:08.450: E/AndroidRuntime(18429): FATAL EXCEPTION: AsyncTask #2
04-07 22:36:08.450: E/AndroidRuntime(18429): java.lang.RuntimeException: An error occured while executing doInBackground()
04-07 22:36:08.450: E/AndroidRuntime(18429):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-07 22:36:08.450: E/AndroidRuntime(18429):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-07 22:36:08.450: E/AndroidRuntime(18429):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-07 22:36:08.450: E/AndroidRuntime(18429):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-07 22:36:08.450: E/AndroidRuntime(18429):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-07 22:36:08.450: E/AndroidRuntime(18429):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-07 22:36:08.450: E/AndroidRuntime(18429):    at java.lang.Thread.run(Thread.java:856)
04-07 22:36:08.450: E/AndroidRuntime(18429): Caused by: java.lang.OutOfMemoryError

How can I resolve this?

Michael Petrotta
  • 59,888
  • 27
  • 145
  • 179

1 Answers1

0

The reason is java.lang.OutOfMemoryError meaning your computations eat too much RAM.

However without knowing what you do it is difficult to say what exactly causes the error. Probably you create too many images/bitmaps.

Here is the info on how much RAM is availiable for your app: https://stackoverflow.com/a/9940415/247013

Ideas for investigation:

  • make use of Bitmap.recycle() - call it whenever you don't need a processed Bitmap
  • try not to store the images in RAM, persisting them to files instead
  • looks like you're trying to pre-create an image for any possible effect in advance - consider re-architechting - do one effect only when user explicitly asks for it (on demand).
Community
  • 1
  • 1
Vit Khudenko
  • 28,288
  • 10
  • 63
  • 91