마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 Bitmap 그리기 질문

0 추천

현재 이미지 크기는 1200,1200, 이미지 위치는 0,0, 뷰가 600,600px일때

왼쪽 이미지처럼 됩니다. 큰 검정 네모가 이미지이고 빨간 네모가 뷰 영역입니다.

 

이걸 우측 그림처럼 이미지영역 아래에서부터 뷰 영역을 통해 보고싶습니다.

이미지 위치 -700,-700 이 이미지 맨 우측 하단인것같습니다.

그래서 초기 이미지 위치를 0, -700 으로 바꿔서 실행해봤는데 왼쪽 그림이랑 똑같이(0,0)

나타납니다.

 

우측 그림처럼 나타내려면 어떻게 해야하나요 ?

음무 (17,820 포인트) 님이 2013년 12월 19일 질문

1개의 답변

+1 추천
 
채택된 답변
일단 님이 1200사이즈를 예로 들죠.....

일단 님이 원하는 작업의 레프트탑 좌표는 0,600 입니다.

0,-700은 대체 어떻게 나오신건지????

그리고 님이 하신것처럼 0,0에서 0,-700을 하셨다면 비트맵은 뷰에서 사라져 보이지 않게 됩니다.

비트맵이 보인다고 하시니 무언가 분명히 잘못 하고 계신겁니다.

그부분은 소스를 보아야 알테구요..
ThisPlus (46,920 포인트) 님이 2013년 12월 19일 답변
음무님이 2013년 12월 20일 채택됨
imgWidth = 1200; //이미지 크기
        imgHeight = 1200;
tempBitmap = BitmapFactory.decodeResource(res, R.drawable.img30x30, option);
        img = Bitmap.createScaledBitmap(tempBitmap, imgWidth, imgHeight, true);
       
        p = new android.graphics.Paint();
        p.setColor(android.graphics.Color.RED);
        p.setAntiAlias(true);
       
        canvas = mHolder.lockCanvas();
        canvas.drawBitmap(img, 0, 0, p);
        mHolder.unlockCanvasAndPost(canvas);   
       
처음 비트맵 띄우는부분 소스코드입니다.

제가 올린 왼쪽 이미지가 처음 실행하면 나오는 화면입니다.
빨간네모의 Width는 단말의 가로길이와 크게 차이가 나지 않기때문에
실제 이미지는 단말 밖으로 튀어나가있는 정도로 크기가 큽니다.

드래그를 통해 이미지를 이동하고있는데 이미지 좌표가
0,0보다 커지면 이미지는 우측 하단으로 향하고
-700,-700보다 값이 작아지면 좌측 상단으로 향합니다.

결과적으로 이미지의 좌표는 0,0 부터 -700,-700 + 뷰영역의 크기 500을 해서 0,0 ~ -1200,-1200 이라고 생각합니다
덧붙여 0,700으로 했을경우 배경은 검은색으로 표시되고 이미지는 보이지 않습니다. drawColor를 GRAY로 했는데도 검은색으로 나타나는게 의아하네요
canvas.drawBitmap(img, 0, 0, p);
이 함수 가 무슨작업을 하시는지 먼저 아셔야 할듯 합니다.
이걸 이해하시면 모든게 다 해결 되실겁니다.
(왜 오른쪽의 좌표가 600이 되고 님이 이해하고 계신게 왜 잘못된건지...)
저 함수를 쓰시면 안되요~~!
저번 질문에도 말씀드렸는데.....렉트를 이용한 함수를 쓰셔야 한다고....
drawBitmap(bitmap, src, dst, paint);
이걸 쓰셔야죠~~!
조금더 자세히 알려주실수있으십니까 ?

canvas.drawBitmap(img, 0, -500, p); 이렇게 쓰는ㄱ ㅔ아니라 ,,

drawBitmap(bitmap, src, dst, paint); 이렇게 쓰라고 하셨는데

src,dst가 뭔지 잘 모르겠습니다.
Canvas c = new Canvas();
Rect src = new Rect(0, 0, 600, 600);
Rect dst = new Rect(0, 0, 600, 600);
c.drawBitmap(bitmap, src, dst, ps);
위와 같이 하면 님이 올리신 이미지의 왼쪽과 같은 결과가 나옵니다.
그럼 오른쪽의 결과는 어떻게 되냐???
src만 바꾸어 다시 찍어내심 됩니다.
src = new Rect(0, 600, 600, 1200);
다시 오른쪽 결과에서 위쪽으로 50픽셀 이동된 곳을 보여주고 싶다.
똑같습니다. src만 바꾸어 주심 됩니다.
src = new Rect(0, 550, 600, 1150);
이렇게 되겠죠...

또한 별외로 해당 이미지를 축소 확대도 가능합니다.
이때는 dst를 이용하죠~~!
이미지를 2배로 늘려 보겠습니다.
dst = new Rect(0, 0, 1200, 1200);
이렇게 해주심 이미지가 2배가 늘어납니다.

이해가 되시나요???

즉 src는 내가 그리고자 하는 이미지, dst는 정의된 이미지가 그려질 위치와 크기 입니다.

이해 하셨다면 그동안 님이 질문하신 이미지 이동방법 확대 축소 모두 가능 해집니다.
잘안됩니다 ㅠㅠ 죄송하지만 소스코드를 보내드리면 한번 확인해주실수 있을까요 ?
...