마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 이미지 질문있습니다

0 추천
package img_combine.img_combine;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;
    Bitmap me1 = null;
    Bitmap me2 = null;
    Bitmap result1 = null;
    Bitmap result2 = null;
    Bitmap bitmap = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        me1 = BitmapFactory.decodeResource(getResources(), R.drawable.kiyeuk);
        me2 = BitmapFactory.decodeResource(getResources(), R.drawable.ah);
        result1 = combineImage(me1, me2, false);
        result2 = combineImage(result1, me1, false);
        imageView = (ImageView)findViewById(R.id.image);
        imageView.setImageBitmap(result2);
    }

    private Bitmap combineImage(Bitmap me1, Bitmap me2, boolean isVerticalMode){
        BitmapFactory.Options option = new BitmapFactory.Options();
        option.inDither = true;
        option.inPurgeable = true;

        if(isVerticalMode)
            bitmap = Bitmap.createScaledBitmap(me1, me1.getWidth(), me1.getHeight()+me2.getHeight(), true);
        else
            bitmap = Bitmap.createScaledBitmap(me1, me1.getWidth()+me2.getWidth(), me1.getHeight(), true);

        Paint p = new Paint();
        p.setDither(true);
        p.setFlags(Paint.ANTI_ALIAS_FLAG);

        Canvas c = new Canvas(bitmap);
        c.drawBitmap(me1, 0, 0, p);
        if(isVerticalMode)
            c.drawBitmap(me2, 0, me1.getHeight(), p);
        else
            c.drawBitmap(me2, me1.getWidth(), 0, p);

        me1.recycle();
        me2.recycle();

        return bitmap;
    }

}

위의 소스로 이미지를 합성하여

두 개의 이미지 me1, me2 를 합성하였고 그 결과를 result1 라고 하였습니다

이 result1를 다시 me1와 합성하려고 하니 어플이 강제종료가 되어버렸습니다.

합성된 이미지를 안드로이드 내에 저장하였다가 다시 불러서 합성소스에 넣어야 하는건가요?

왜 오류가 나는 것인지 알고싶습니다.
익명사용자 님이 2016년 8월 4일 질문

1개의 답변

0 추천
 
채택된 답변

Android Developer 사이트에서 Bitmap 클래스에 대한 내용을 보면 

recycle() - Free the native object associated with this bitmap, and clear the reference to the pixel data.

위와 같이 설명되어 있습니다.

합성 한 후에 me1을 recycle 해버렸기 때문에 me1은 이제 참조하는 곳이 없습니다.

캬옹이 (37,920 포인트) 님이 2016년 8월 4일 답변
와 정말 감사합니다 recycle 지우니까 되네요!!!
...