본문 바로가기

동방프로젝트

그림판 만들기(9-3)

package com.example.helloandroid;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;

@SuppressWarnings("deprecation")

//간단 미니 포토샵 앱.

//직풀은, 푀색 영상 아이콘을 없앤다.
//밝게 하기 아이콘 클릭시 채도가 높아지고, 어둡게 하기 아이콘 선택시 채도가
//낮아지도록.
//블러링, 엠보싱 아이콘을 추가하고, 클릭하면 블러링 또는 엠보싱 기능이 온오프
public class MainActivity extends AppCompatActivity {

ImageButton ibZoomin, ibZoomout, ibRotate, ibBright,
ibDar, ibGray;
MyGraphicView graphView;

//아이콘 클릭 시의 내용을 onCreate()에 코딩시 복잡. 따라서
//따로 별개의 메소드를 만든다
static float scaleX =1, scaleY=1;
static float angle=0;
static float color=1;
static float satur=1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGraphicView(this));
setTitle("미니 포토샵");

//pcitureLayout을 인플레이트 후, MyGraphhicView형 클래스변수 첨부
//아래쪽 레이아웃에, MyGraphicView에서 설정한 내용이 출력됨
LinearLayout picturLayout=(LinearLayout)
findViewById(R.id.pictureLayout);
graphView=(MyGraphicView) new MyGraphicView(this);
picturLayout.addView(graphView);

//onCreate안에서 메소드 호출
clickIcons();
}

private void clickIcons() {
ibZoomin=(ImageButton) findViewById((R.id.ibZoomin));
ibZoomin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
scaleX = scaleX +0.2f;
scaleY=scaleY+0.2f;
graphView.invalidate();
}
});

ibZoomin=(ImageButton) findViewById((R.id.ibZoomin));
ibZoomin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
scaleX = scaleX -0.2f;
scaleY=scaleY-0.2f;
graphView.invalidate();
}
});

ibRotate=(ImageButton)findViewById(R.id.rotate);
ibRotate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
angle=angle+20;
graphView.invalidate();
}
});

ibGray=(ImageButton)findViewById(R.id.ibDarker);
ibBright=(ImageButton)findViewById(R.id.ibFlush);

ibBright.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
color=color+0.2f;
graphView.invalidate();
}
});

ibGray.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//채도 배수로 쓰일 전역변수 satur: 1이 기본
//0~1이면 채도가 낮게 보이고, 1 이상이면 채도가 높게 보임
//0으로 하면 회색조 이미지
//클릭 시마다 1, 0을 번갈아 함
if (satur == 0) satur = 1;
else satur = 0;
graphView.invalidate();
}
});
}

private static class MyGraphicView extends View {
public MyGraphicView(Context context) {
super(context);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

//화면()의 중앙 구하고, 전역변수에 설정된 값으로 캔버스 축척 설정
int cenX=this.getWidth()/2;
int cenY=this.getHeight()/2;
canvas.scale(scaleX, scaleY, cenX, cenY);
canvas.rotate(angle, cenX, cenY);

Paint paint=new Paint();
//rgb 각 색상의 배율, 알파, 밝기
float[] array= { color, 0, 0, 0, 0,
0, color, 0, 0, 0,
0, 0, color, 0, 0,
0, 0, 0, 1, 0};
ColorMatrix cm= new ColorMatrix(array);
//채도값 0일 때, 채도 0으로 해 회색영상(setSaturation)
//1일땐 실행 안함. 이때, setSaturation()메소드 실행시
//앞의 컬러 매트릭스 값이 무시된다.
if(satur==0) cm.setSaturation(satur);
paint.setColorFilter(new ColorMatrixColorFilter(cm));

Bitmap picture= BitmapFactory.decodeResource(getResources(),
R.drawable.gukbab);
int picX=(this.getWidth()-picture.getWidth())/2;
int picY=(this.getWidth()-picture.getWidth())/2;

//본래의 darwBitmap의 마지막 패러미터를 null paint로 변경
canvas.drawBitmap(picture, picX, picY, paint);

picture.recycle();
}
}
}

////////////////////////

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:id="@+id/iconLayout"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<!--레이아웃의 크기(높이) 1:9로 생성-->

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibZoomin"
android:src="@drawable/tenmonan"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibZoomout"
android:src="@drawable/chiwawa"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibRotate"
android:src="@drawable/chinhan"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibFlush"
android:src="@drawable/naonda"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibDarker"
android:src="@drawable/naehan"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibSkew"
android:src="@drawable/gmw"/>

</LinearLayout>

<LinearLayout
android:id="@+id/pictureLayout"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="9"
android:gravity="center"
android:orientation="vertical">
</LinearLayout>

</LinearLayout>

'동방프로젝트' 카테고리의 다른 글

직풀 10-1  (0) 2020.08.17
개선그림판 9-3  (2) 2020.08.17
실습, 직풀 9-2) 그림판 만들기  (2) 2020.08.17
실습, 직풀 8-2)  (0) 2020.08.17
sd카드 작업 1  (0) 2020.08.16