ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이미지, 포토샵, 스케치
    안드로이드 스튜디오 2021. 12. 31. 03:44

    1. 비트맵의 기본 이미지 출력

    : 캔버스에 이미지 파일을 보여주기 위해 사용

    : /res/drawable 폴더에 있는 이미지 파일을 보여주는 onDraw() 메소드

    protected void onDraw(Canvas canvas) {
    	super.onDraw(canvas);
        
        Bitmap picture = BitmapFactory.decodeResource(getResources(), R.drawable.pictureID);
        canvas.drawBitmap(picture, StartX, StartY, null);
        picture.recycle();
    }

     

     

    비트맵 이미지 출력

    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setContentView(new MyGraphicView(this));
            setTitle("비트맵 이미지 출력");
        }
    
        private static class MyGraphicView extends View {
            public MyGraphicView(Context context) {
                super(context);
            }
    
            @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
    
                Bitmap picture = BitmapFactory.decodeResource(getResources(), R.drawable.실행파일);
    
                // SD 카드의 그림의 경우, Bitmap picture = BitmapFactory.decodeFile(“파일 경로와 파일명”)
    
                int picX = (this.getWidth() - picture.getWidth()) / 2;
                int picY = (this.getHeight() - picture.getHeight()) / 2;
                canvas.drawBitmap(picture, picX, picY, null);
                picture.recycle();  // 비트맵 리소스 해제
            }
        }
    }

     

    2. Canvas 클래스의 기하학적 메소드

     

       회전 : rotate()

       확대/축소 : scale()

       이동 : translate()

       기울이기 : skew()

    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.os.Bundle;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new MyGraphicView(this));
            setTitle("이미지의 기하학적 변화");
        }
    
        private static class MyGraphicView extends View {
            public MyGraphicView(Context context) {
                super(context);
            }
    
            @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                Bitmap picture = BitmapFactory.decodeResource(getResources(), R.drawable.실행파일);
    
                int cenX = this.getWidth() / 2;
                int cenY = this.getHeight() / 2;
                int picX = (this.getWidth() - picture.getWidth()) / 2;
                int picY = (this.getHeight() - picture.getHeight()) / 2;
    
    			// rotate
                canvas.rotate(45, cenX, cenY);
                canvas.drawBitmap(picture, picX, picY, null);
    
    			// translate
                // canvas.translate(-150, 200);
                // canvas.drawBitmap(picture, picX, picY, null);
    
    			// scale
                // canvas.scale(2, 2, cenX, cenY);
                // canvas.drawBitmap(picture, picX, picY, null);
    
    			// skew
                // canvas.skew (0.3f, 0.3f);
                // canvas.drawBitmap(picture, picX, picY, null);
    
                picture.recycle(); // 비트맵 리소스 해제
            }
        }
    }

     

    3. 블러링

    : 이미지를 뿌옇게 만드는 것 , BlurMaskFilter 클래스 사용

    BlurMaskFilter(반지름, 스타일);

     - 반지름 : 블러링이 될 폭, 반지름이 클수록 이미지의 가장자리가 크게 블러링 됨

     - 종류 : NORMAL, INNER, OUTER, SOLID

    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.BlurMaskFilter;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new MyGraphicView(this));
            setTitle("Bluring");
        }
    
        private static class MyGraphicView extends View {
            public MyGraphicView(Context context) {
                super(context);
            }
    
            @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
    
                Bitmap picture = BitmapFactory.decodeResource(getResources(), R.drawable.실행그림);
    
                int picX = (this.getWidth() - picture.getWidth()) / 2;
                int picY = (this.getHeight() - picture.getHeight()) / 2;
    
                Paint paint = new Paint();
                BlurMaskFilter bMask;
    
                bMask = new BlurMaskFilter(30, BlurMaskFilter.Blur.NORMAL);
                paint.setMaskFilter(bMask);
                canvas.drawBitmap(picture, picX, picY, paint);
    
                // bMask = new BlurMaskFilter(30, BlurMaskFilter.Blur.INNER);
                // paint.setMaskFilter(bMask);
                // canvas.drawBitmap(picture, picX, picY, paint);
                // picture.recycle(); // 비트맵 리소스 해제
                
                // bMask = new BlurMaskFilter(30, BlurMaskFilter.Blur.OUTER);
                // paint.setMaskFilter(bMask);
                // canvas.drawBitmap(picture, picX, picY, paint);
                // picture.recycle(); // 비트맵 리소스 해제
                
                // bMask = new BlurMaskFilter (30, BlurMaskFilter.Blur.SOLID);
                // paint.setMaskFilter(bMask);
                // canvas.drawBitmap(picture, picX, picY, paint);
                // picture.recycle(); // 비트맵 리소스 해제
            }
        }
    }

     

    4. 엠보싱(Embossing)

    : 이미지가 볼록하게 튀어나와 보이는 효과로, EmbossMaskFilter 클래스 제공

    EmbossMaskFilter(빛의 xyz 방향 1차 배열, 빛의 밝기, 반사 계수, 블러링 크기);

    protected void onDraw(Canvas canvas) {
    	super.onDraw(canvas);
        
        int cenX = this.getWidth()/2;
        int cenY = this.getHeight()/2;
        
        Paint paint = new Paint();
        paint.setColor(Color.GRAY);
        EmbossMaskFilter eMask;
        
        eMask = new EmbossMaskFilter(new float[] {3,3,3}, 0.5f, 5, 10);
        paint.setMaskFilter(eMask);
        canvas.drawCircle(cenX, cenY, 150, paint);
        ``빛의 방향을 바꾼 세 가지 스타일``
        
        }

     

    5. 컬러 매트릭스로 이미지 처리

    : 색상이나 밝기를 조절하기 위해 ColorMatrix 클래스와 ColorMatrixColorFilter 클래스를 사용

    : 4 x 5 배열 = { // Red(기본 1). Green(1). Blue(1). Alpha(1). Brightness

                         // RGB는 배수로 주면 각 색상의 대비가 커짐

                         // Alpha(0~1)는 투명도로 0이면 투명, 1이면 불투명

                         // Brightness에 양수이면 색상이 밝고, 음수이면 어두움

    float[] array = {	``` 생략 ``` }
    
    ColorMatrix cm = new ColorMatrix(array);
    paint.setColorFilter(new ColorMatrixColorFilter(cm));
    
    canvas.drawBitmap(picture, picX, picY, paint);

     

    댓글

Designed by Tistory.