1. 비트맵의 기본
: Bitmap 클래스는 캔버스에 이미지 파일을 보여주는 데 사용
- 이미지를 화면 중앙에 출력하는 Java 코드
package com.cookandroid.project9_2;
import androidx.appcompat.app.AppCompatActivity;
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));
}
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.img05);
//화면 중앙에 출력
int picX = (this.getWidth() - picture.getWidth()) / 2;
int picY = (this.getHeight() - picture.getHeight()) / 2;
canvas.drawBitmap(picture, picX, picY, null);
picture.recycle();
}
}
}
2. 이미지의 기하학적 변환
: 이미지 이동, 확대, 축소, 회전, 기울이기 등
- 기하학적 변환의 Java 코드
package com.cookandroid.project9_2;
import androidx.appcompat.app.AppCompatActivity;
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));
}
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.img05);
int cenX = this.getWidth() / 2;
int cenY = this.getHeight() / 2;
int picX = (this.getWidth() - picture.getWidth()) / 2;
int picY = (this.getWidth() - picture.getHeight()) / 2;
//45도 회전
canvas.rotate(45, cenX, cenY);
canvas.drawBitmap(picture, picX, picY, null);
//이동
canvas.translate(-150, 200);
canvas.drawBitmap(picture, picX, picY, null);
//2배 확대
canvas.scale(2, 2, cenX, cenY);
canvas.drawBitmap(picture, picX, picY, null);
//0.3만큼 기울임
canvas.skew(0.3f, 0.3f);
canvas.drawBitmap(picture, picX, picY, null);
picture.recycle();
}
}
}
3. 이미지 활용
- 블러링 : 이미지를 뿌옇게 만듦 - BlurMaskFilter 클래스 사용
package com.cookandroid.project9_2;
import androidx.appcompat.app.AppCompatActivity;
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.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGraphicView(this));
}
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.img05);
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);
picture.recycle();
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();
}
}
}
- 앰보싱 : 이미지가 볼록하게 튀어나와 보이는 효과를 냄 - EmbossMaskFilter 클래스 사용
package com.cookandroid.project9_2;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.Paint;
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));
}
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.img05);
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);
}
}
}
- 컬러매트릭스 : 색상이나 밝기를 조절하기 위해 사용 - ColorMatrix, ColorMatrixColorFilter 클래스 사용
package com.cookandroid.project9_2;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.EmbossMaskFilter;
import android.graphics.Paint;
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));
}
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.img05);
int picX = (this.getWidth() - picture.getWidth()) / 2;
int picY = (this.getHeight() - picture.getHeight()) / 2;
Paint paint = new Paint();
float[] array = {2,0,0,0,-25,
0,2,0,0,-25,
0,0,2,0,-25,
0,0,0,1,0};
ColorMatrix cm = new ColorMatrix(array);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(picture, picX, picY, paint);
picture.recycle();
}
}
}
'Android > 7. 그래픽과 이미지' 카테고리의 다른 글
Day 114 : 간단 그림판 앱 만들기 (0) | 2022.04.04 |
---|---|
Day 114 : 그래픽 (0) | 2022.04.04 |