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

안드로이드 이미지 특정영역을 크롭하고 싶습니다.

0 추천

 

 

인터넷에 찾아보니 대부분 갤러리나 카메라에서 이미지를 호출해서 사용자가 원하는 사이즈로 조절 후

크롭하는 예제들만 있는데, 저같은 경우에는 앱 절반이상의 영역이 동영상이 나옵니다. 

1280x720 영역 중, 880x720이 영상이 나옵니다. 일시정지 하면 비트맵값을 따로 저장해서 축소/확대

와 같은 줌인 줌아웃 기능을 넣었구요. 여기까진 무난했는데 문제가..

캡쳐 버튼을 따로 둬서 영상 영역에 나오는 이미지나 영상을 캡쳐할 수 있도록 했습니다 . 캡쳐도 잘 되는데,

크롭할 때가 잘 안되네요..제가 원하고자 하는 기능이, 880x720영역에서 출력되는 이미지를 확대하고 나서 

880x720 이런 특정 사이즈로 잘라서 저장하고 싶은데, 자꾸 원본크기(줌인 하기 전)로 캡쳐가 되네요..

 

크롭 부분 소스는 

//크롭
public Bitmap getImageBitmapCrop(){
isCapture = true;
this.invalidate();
Bitmap temp2 = null;
try {
this.buildDrawingCache();
Bitmap temp = getDrawingCache();
Rect cropRect = getRect(temp.getHeight()/2, temp.getWidth()/2);
temp2 = Bitmap.createBitmap(temp, cropRect.left, cropRect.top, cropRect.width(), cropRect.height());
 
} catch (Exception e) {
//getDrawingCache == null
Bitmap temp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
Canvas cc = new Canvas(temp);
cc.drawBitmap(getDrawabletoBitmap(), savedMatrix2, null);
Rect cropRect = getRect(temp.getHeight()/2, temp.getWidth()/2);
temp2 = Bitmap.createBitmap(temp, cropRect.left, cropRect.top, cropRect.width(), cropRect.height());
isCapture = false;
return temp2;
}
isCapture = false;
this.invalidate();
return temp2;
}
 
인데요..인터넷에 찾아보니 특정 영역을 크롭하려면 비트맵 좌표값을 알아야 한다는데.. 지금 찾고 있지만 많이 헷갈리네요.
 
 
 
 
 
//zpic에서 크롭한 영역을 저장
if (zpic.getImageBitmapCrop().compress(CompressFormat.JPEG,
100, out));
 
zpic이 이미지가 띄워지는 레이아웃입니다. 제 스스로 해결하고자 노력하고있지만 다른 분들 의견이나 조언 듣고자 질문글 올려봅니다..^^;
 
 
 
 
다시 한 번 정리하자면, 전체 해상도 1280x720 중, 왼쪽을 기준으로 880x720 영역이 비디오 및 이미지 출력 레이아웃이고, 영상을 일시정지할 때만 비트맵값을 따른 변수에 담아서 고놈에게 줌인/줌아웃기능을 추가했습니다. 
그리고 줌인[확대]할 때 특정 영역만큼 [880x720] 현재 줌인 된 상태의 화면을 크롭해서 저장하고 싶은데 잘 안됩니다..
 
anci (19,950 포인트) 님이 2013년 6월 17일 질문
anci님이 2013년 6월 17일 수정

1개의 답변

0 추천
 
채택된 답변

dstBmp 를 응용하시기 바랍니다.

View v1 = rootview.getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap srcBmp = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);

        Bitmap dstBmp = Bitmap.createBitmap(
                srcBmp,
                30,
                srcBmp.getHeight() / 2,
                srcBmp.getWidth() - 60,
                srcBmp.getHeight() / 2
                );

        imgview.setImageBitmap(dstBmp);

aucd29 (218,390 포인트) 님이 2013년 6월 17일 답변
anci님이 2013년 6월 18일 채택됨
답변 감사합니다. 일단 다른 방법들도 모색하고있는데.. 구글에서 찾아도 정말 안나오네요..^^; 최후의 방법으로 사용해보겠습니다.
...