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

화면 부분캡쳐에 대한 질문입니다.

0 추천
지금 구현하고 있는 기능이

간단한 사각형 리니어 레이아웃을 서비스로 구현해서 화면에 띄우고

스크린에서 해당 레이아웃 범위에 있는 부분만 캡쳐하는겁니다

 

지금 시도했던 방법이 먼저 전체 사진을 비트맵에 저장하기위해

디스플레이 변수에 window.getDefaultDisplay();를 넣고

Point size = new Point();
 디스플레이변수.getSize(size);
 전체화면 너비 = size.x;
 전체화면 높이 = size.y;

전체사진 = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);

이런식으로 전체 너비/높이를 구한뒤에 버퍼에서 받아오고

 

스크린상의 리니어 레이아웃 x.y좌표와 너비 높이를 구해서

  부분사진 = Bitmap.createBitmap(전체사진 ,레이아웃x좌표, y좌표 ,너비 ,높이);

이런식으로 해당 부분만 뽑아놓고 나중에 파일로 저장하는 방식인데요

 

문제는 이상하게 부분사진이 리니어 레이아웃보다 크게 잡힌다는 겁니다.

좌표도 아래쪽으로 잡히는게 마치 전체사진의 크기가 조금 작아져서

지정한 좌표와 너비,높이가 의도한거보다 커진거 같은데요

이 뒤에 해결책이 뭔지 모르겠어서 계속 고민하다가 이렇게 질문드립니다.
날라간다 (220 포인트) 님이 2017년 10월 2일 질문
저도 비슷한 기능을 구현하려고 하는 중인데요, 서비스로 구현하신 사각형 리니어 레이아웃을 움직이게 구현하셨나요?

1개의 답변

+1 추천
 
채택된 답변
캡쳐한 비트맵의 사이즈와 화면해상도가 다르기 때문에 비율을 계산해서 크롭해야 합니다.
Will Kim (43,170 포인트) 님이 2017년 10월 3일 답변
날라간다님이 2017년 10월 4일 채택됨
빠른답변 정말 감사드립니다

그런데 비율을 어떻게 구해야할까요?

지금 로그로 전체 사이즈나 density를 찍어보고 있는데 전부 같다고 나옵니다
1. 스크린의 사이즈를 구합니다.
   https://stackoverflow.com/questions/4743116/get-screen-width-and-height

2. 캡쳐한 비트맵의 사이즈를 구합니다.
   https://stackoverflow.com/questions/8880376/how-to-get-height-and-width-of-a-image-used-in-android

상기 1, 2 번의 사이즈가 같지 않을 겁니다.

가정.
1번의 스크린 사이즈를 scrHeight, scrWidth라고 하고,
원하는 좌표가  x, y, 해당 사이즈가 targetHeight, targetWidth라고 하고,
bitmap의 size가 bmpHeight, bmpWidth인 경우.

크롭할 cropX, cropY, cropHeight, cropWidth는
cropx = x * bmpWidth /scrWidht;
cropy = y * bmpHeight/screHeight;
cropWidth = targetWidth * bmpWidth/scrWidth;
cropHeight = targetHeight * bmpHeight/scrHeight;

이렇게 됩니다.
정말 감사합니다
해결했습니다!
...