본문 바로가기

프로그래밍./Android

[안드로이드] bitmap 이미지 자르기. 간단한 예제)


안드로이드 이미지 자르기. (bitmap 자르기)

안드로이드를 하면서 가장 만만한 어플이 퍼즐, 또는 그림 퍼즐이다.

많은 이들이 도전하고, 나 또한 예전에 처음 시작할 때 만들어 보기도 했던.


대신 예전에 만들 때는 이 이미지를 다루는 방법을 몰라서 직접 사진을 자르고 그 이미지를 넣어주었다.

당연히 내가 미리 정해둔 그림 밖에 사용할 수 없으며.. 퍼즐의 난이도 (퍼즐 개수)를 조정하려 해도

각각의 이미지를 잘라서 직접 넣어두어야 했던 말도 안되는 시절.. 물론 알고 싶어서 열심히 알아봤지만

이해도 잘 안되고.. 명확하게 설명해주는 사람도 없으며, 질문에도 딱히.. 그러다 이번에 다시 하게 되면서

드디어 알게 되었다. 드디어...



위에서 보이는 것 처럼 왼쪽 상단의 모서리(0,0)을 기준으로 (가로 100, 세로 75)의 크기로 잘라 내어서 가지고 있다.
당연하겠지만. 잘라내서 배열에 담을 수도 있다. 그 이미지를 사용해서 퍼즐의 이미지 버튼,
또는 각자 사용 방법에 따라서 사용할 수 있다.


 

위에 보면 MyCustomView 뭐 이런건 사실 크게 상관은 없다.
그냥 화면에 보여주려고 하는 뷰를 지정하고 그러는거니까.

Bitmap New = Bitmap.createBitmap(Old, 0, 0, 100, 75);
요놈. 책에도 있고 여러 싸이트에도 있었으나, 어떻게 쓰는지 제대로 알지 못해서 많이 지나쳤었다 - 0-;;

Old는 Bitmap으로 만든 변수명이다. 즉, 사용자가 만든 Bitmap을 아무거나 입력해 주면 된다. (원본 사진의 Bitmap)
사진을 Bitmap 코드로 가져오는 방법을 모른다면 아래 링크를 참조 하자.
[안드로이드]Bitmap 으로 만들기(이미지 파일 Bitmap으로)

createBitmap(Old, 첫 x좌표,  첫 y좌표, 가로, 세로);
첫 x,y좌표는 사진의 시작점 좌표를 말한다. 사진에서 자기가 자르고 싶은 부분이 있을 것 이다.
그 곳의 시작점을 넣고. 그 시작점을 기준으로 가로 세로 크기만큼 사진을 자른다.

위에서는 0,0 사진의 첫부분에서 100, 75 크기 만큼 잘라내서 따로 저장했다. (파일로 저장한 것 아님.)

그림 퍼즐을 만들겠다면 한 개만 자르진 않을테니 아래 처럼 배열을 선언하고 반복해서 잘라보자.
for(x =0; x<=200; x+=100)
{
      for(y=0; y<=150; y+=75, i++)
      {
           New[i]= Bitmap.createBitmap(Old, x, y, 100, 75);
      }
}

여기서는 정적으로 직접 수치를 넣어주었지만, 동적으로도 가능하다. 3*3을 할지 5*5가 될지 모르니.

for(y=0; y<=(Old.getHeight()-Old.getHeight()/num); y+=Old.getHeight()/num )
{
      for(x =0; x<=(Old.getWidth()-Old.getWidth()/num); x+=Old.getWidth()/num,i++)
      {
          New[i]= Bitmap.createBitmap(Old, x, y, Old.getWidth()/num, Old.getHeight()/num);
       }
}

Old.getHeight 은 Old 파일의 세로의 높이를 말한다. Old.getWidth() 는 당연히 가로의 길이.
위의 num은 퍼즐의 난이도? 3*3 인지 4*4 인지 정해서 사진을 3개로 나눌지 4개로 나눌지 정한다.

Old.getWidth()-Old.getWidth()/num 를 한 이유는

폭이 300이라고 가정하자면 기준점이 200이 되었을 때 가로 100만큼 자른다. 즉 화면 끝까지 자르는데
x<=Old.getWidth() 라고 사용하면 300에서 가로로 100만큼 자르게 되는데 이미 사진의 끝이기 때문에 에러가 난다.
전체 사진에서 내가 자르고자 하는 크기를 한번 전 까지 해주어야 정상적으로 원하는 결과가 나올 것이다.



유용한 정보가 되셨다면 아래 손가락 버튼 한번 눌러주세요 ^-^