[안드로이드] Bitmap 회전, 좌우/상하 반전 (rotate, inverse)
# [Android] Bitmap 크기 조절 / 겹치기 / 잘라내기 바로가기
구현 예제
Matrix를 이용한 Bitmap 변형
Bitmap을 생성할때 matrix에 속성을 넣어 생성하면 Matrix에 따른 옵션을 변경 할 수 있다.
회전, 반전, 이동, 크기변경 등 여러가지 속성을 가지고 있다.
Bitmap 상하 / 좌우 반전하기
Matrix sideInversion = new Matrix();
sideInversion.setScale(1, -1); // 상하반전sideInversion.setScale(-1, 1); // 좌우반전
Bitmap sideInversionImg = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), sideInversion, false);
Matrix rotateMatrix = new Matrix();
rotateMatrix.postRotate(회전할 각도); //-360~360
Bitmap sideInversionImg = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), rotateMatrix, false);
package com.tistory.dwfox.dwfoxtest;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
/**
* Created by Administrator on 2016-03-22.
*/
public class BitmapRotateActivity extends Activity implements View.OnClickListener{
private ImageView imageView;
private int invertIndex = 0;
private int rotate = 0;
Bitmap bitmap = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bitmap_rotate_activity);
imageView = (ImageView)findViewById(R.id.bitmap);
bitmap = null;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
imageView.setImageBitmap(bitmap);
findViewById(R.id.invertion_button).setOnClickListener(this);
findViewById(R.id.rotate_button).setOnClickListener(this);
}
public Bitmap InversionBitmap(Bitmap bitmap, int inverse) {
Matrix sideInversion = new Matrix();
if(inverse ==0 )
sideInversion.setScale(1, 1); // 원본
else if(inverse == 1)
sideInversion.setScale(-1, 1); // 좌우반전
else if(inverse == 2)
sideInversion.setScale(1, 1); // 원본
else
sideInversion.setScale(1, -1); // 상하반전
Bitmap sideInversionImg = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), sideInversion, false);
return sideInversionImg;
}
public Bitmap rotateBitmap(Bitmap bitmap, int rotate){
Log.d("TEST", "ROTATE : " + rotate);
Matrix rotateMatrix = new Matrix();
if(rotate == 0 )
rotateMatrix.postRotate(0);
else if(rotate == 1)
rotateMatrix.postRotate(45);
else if(rotate == 2)
rotateMatrix.postRotate(90);
else if(rotate == 3)
rotateMatrix.postRotate(135);
else if(rotate == 4)
rotateMatrix.postRotate(180);
else if(rotate == 5)
rotateMatrix.postRotate(225);
else if(rotate == 6)
rotateMatrix.postRotate(270);
else
rotateMatrix.postRotate(315);
Bitmap sideInversionImg = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), rotateMatrix, false);
return sideInversionImg;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.invertion_button:
invertIndex++;
if(invertIndex == 4) invertIndex =0;
imageView.setImageBitmap(InversionBitmap(bitmap, invertIndex % 4));
break;
case R.id.rotate_button:
rotate++;
if(rotate == 8) rotate =8;
imageView.setImageBitmap(rotateBitmap(bitmap, rotate % 8));
break;
}
}
}
Layout 전체 소스 ( bitmap_rotate_activity.xml )
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
<ImageView
android:id="@+id/bitmap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleType="fitCenter" />
<Button
android:id="@+id/invertion_button"
android:layout_width="125dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="25dp"
android:text="Inversion"
android:layout_marginLeft="50dp"
android:background="@drawable/btn" />
<Button
android:id="@+id/rotate_button"
android:layout_width="125dp"
android:layout_height="50dp"
android:text="Rotate"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="25dp"
android:layout_marginRight="50dp"
android:background="@drawable/btn" />
</RelativeLayout>
예제 이미지
[출처 : http://dwfox.tistory.com/27 ]
'IT > 안드로이드+JAVA' 카테고리의 다른 글
[안드로이드] IllegalArgumentException, contains a path separator (0) | 2016.09.30 |
---|---|
안드로이드 intent putExtra arraylist (0) | 2016.09.30 |
[안드로이드] 카메라 앞, 뒤 전환 (0) | 2016.09.28 |
[안드로이드] Glide Library 사용시 참고 사항!! (0) | 2016.09.28 |
[안드로이드] 이미지 경로 이미지뷰에 출력 (0) | 2016.09.28 |