-
이미지, 포토샵, 스케치안드로이드 스튜디오 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);
'안드로이드 스튜디오' 카테고리의 다른 글
간단한 그림판 구현 (0) 2021.12.31 [에러] The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30). (0) 2021.12.31 파일 입출력과 일기장, 그래픽 (0) 2021.12.31 옵션메뉴, 컨텍스트 메뉴, 대화상자 (0) 2021.12.31 뷰 컨테이너 (0) 2021.12.31