viewWidth = 1080
viewHeight = 1920
bitmapWidth = 3000
bitmapHeight = 800
이미지를 세로로 가득 채우고 가로는 스크롤 되도록 구현했다고 가정합니다.
물론 세로형 이미지의 경우는 가로를 가득 채우게 되겠죠? 뭐 이거는 구현에 따라...
이미지의 종횡 비율과 어느쪽을 fill시키고 해당 비율을 factor값으로 사용할지 결정해야합니다.
float factor = 0f;
if(bitmapWidth > bitmapHeight){
factor = (float)viewHeight / (float)bitmapHeight;//가로형 이미지. 세로를 fill해서 factor를 구해야합니다.
}
else{
factor = (float)viewWidth / (float)bitmapWidth;//세로형 이미지. 가로를 fill해서 factor를 구해야합니다.
}
int scaledWidth = bitmapWidth * factor; // 4050
int scaledHeight = bitmapHeight * factor; // 1080
이제 뷰에서 터치값이 들어온다면 scaledWidth, scaledHeight 범위에서 들어오겠죠.
////////////////////////////////
이미지 표현: 이미지뷰에 Matrix를 factor값으로 setScale설정하셔야 하겠죠.
단순 화면 그리기: 그냥 받은 포인트를 onDraw에서 View에 draw하시면 될테고,
비트맵에 추가: Canvas 얻으시고 save 후 factor가 적용된 matrix적용하고 view 좌표대로 그릴꺼 그리시고 restore하시면 되겠습니다.
Canvas c = new Canvas(bitmap);
c.save();
c.setMatrix(matrix);
c.drawXXXXX();
c.restore();
처럼 그리시면 되겠네용...
추가 설명을 드리면 위의 조건의 경우 factor는 1.35가 나옵니다.
원본이 3000x800이라고 가정했으니 4050x1080으로 스케일 될테구요.
bitmap에서 canvas를 얻으면 일단 3000x800짜리 캔바스가 나옵니다.
c.save후 setMatrix하시면 canvas가 factor대로 4050x1080으로 확장된 상태가 됩니다.
여기에 그릴꺼 다 그리시면 원하는 위치(View에서 받은 좌표값대로)에 그려지겠죠.
그리고 c.restore를 호출하면 다시 3000x800짜리 캔버스가 되는거죠. 이때 restore전에 그린것들도 같이 크기가 복구되구요.