본문 바로가기

안드로이드

비트맵 이미지 사용

반응형

비트맵 객체는 메모리에 만들어지는 이미지라고 할 수 있다

사진을 찍었을 때 만들어지는 이미지 파일을 읽어 들이면 메모리에 비트맵 객체로 만들 수 있다

그리고 비트맵 객체를 이용하면 화면에 이미지를 그릴 수 있다

비트맵 객체를 만들면 이를 이용해 다양한 조작을 할 수 있고, 특히 그래픽을 그릴 수 있는 메모리 공간을 제공한다

 

더블 버퍼링이라 불리는 방법은, 별도의 메모리 공간에 미리 그래픽을 그린 후, 뷰가 다시 그려져야할 필요가 있을 때 미리 그려놓은 비트맵을 화면에 표시하는 방법이다

 

CustomViewImage.java

package com.example.a68_sample_customviewimage;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class CustomViewImage extends View {
    private Bitmap cacheBitmap;
    private Canvas cacheCanvas;
    private Paint mPaint;

    public CustomViewImage(Context context) {
        super(context);

        init(context);
    }

    public CustomViewImage(Context context, AttributeSet attrs) {
        super(context, attrs);

        init(context);
    }

    private void init(Context context) {
        mPaint = new Paint();
    }

    //    뷰가 화면에 보이기 전에 Bitmap 객체 만들고 그 위에 그리기
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        createCacheBitmap(w, h);
        testDrawing();
    }

    //    메모리에 Bitmap 객체를 만들고 Canvas 객체 설정
    private void createCacheBitmap(int w, int h) {
        cacheBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        cacheCanvas = new Canvas();
        cacheCanvas.setBitmap(cacheBitmap);
    }

    //    빨간 사각형 그리기
    private void testDrawing() {
        cacheCanvas.drawColor(Color.WHITE);
        mPaint.setColor(Color.RED);
        cacheCanvas.drawRect(100, 100, 200, 200, mPaint);
    }

//    메모리의 Bitmap을 이용해 화면에 그리기
    @Override
    protected void onDraw(Canvas canvas) {
        if (cacheBitmap != null) {
            canvas.drawBitmap(cacheBitmap, 0, 0, null);
        }
    }
}

 

앱을 실행하여 뷰가 새로 그려질때 호출되는 onDraw 메소드에는 단순히 메모리에 만들어 두었던 cacheBitmap을 그리는 코드만 들어있다

실제 그래픽이 그려지는 시점은 testDrawing 메소드가 호출되었을 때 이다

createBitmap 메소드를 이용해 만들어지는 비트맵 객체는 뷰의 onSizeChanged 메소드가 호출되었을 때 초기화된 후, testDrawing 메소드에 의해 그려진다

 

 

 

MainActivity.java

package com.example.a68_sample_customviewimage;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);

        CustomViewImage customViewImage = new CustomViewImage(this);

        setContentView(customViewImage);
    }
}

 

 

반응형

'안드로이드' 카테고리의 다른 글

페인트보드(그림판) 만들기  (0) 2021.11.02
BtimapFactory 클래스  (0) 2021.11.02
드로어블 객체로 만들어 그리기  (0) 2021.11.02
뷰에 그래픽 그리기  (0) 2021.11.01
내용 제공자 사용하기, 연락처 조회  (0) 2021.11.01