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

canvas의 가로 세로를 구하여 Crop영역이 이미지를 벗어나지 않게하고 싶습니다.

0 추천
안녕하세요.
현재 저는 이미지 자르기를 직접 구현하고 있습니다.
지금 문제가 이미지를 btimap 파일로 불러오고
btmmap을 canvas에 넣었습니다.

여기서 제가 하고 싶은것이 Crop(자르기)영역이 이미지를 벗어나지 않았으면 좋겠습니다.
그래서 이미지가 올라가 있는 canvas의 가로 세로를 구하여 Crop영역이 이미지를 벗어나지 않게
if문으로 구현해 보려고 합니다.
아래 1~4까지 제가 시도한 과정을 글로 적어보았습니다.
///////////////////////////////////////////////////////////////////
보시면 Display 의 가로값을 가져와 mCropArea = (mWidth * 1/5)/2; 이런식으로 변수를 만들어
Crop영역을 그려주는 OnDraw메소드에서 활용하고 있습니다.
생각해보니 좀 더 좋은 방법이 화면가로 크기를 기준으로 줄이기 보단 캔버스 사이즈를 바로 가져와
크롭영역을 제한하면 되지 않을까 합니다 그런데 캔버스의 사이즈를 어떻게 얻는지 모르겠습니다.
캔버스 사이즈를 기준으로 하면 좌표도 변환해주어야 하는지도 궁금합니다.
////////////////////////////////////////////////////////////////////

1.디스플레이 가로 세로를 얻어 왔습니다.
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
  mWidth = display.getWidth();
  mHeight = display.getHeight();
2.비트맵이미지를 위에서 구한 디스플레이 가로세로를 사용하여 화면보다 작게 나오도록 하였습니다.
//Bitmap 이미지 조절
mBitmap = Bitmap.createScaledBitmap(mBitmap, (int)mWidth * 8/10, (int)mHeight * 42/50, false);\

3.onDraw 메소드로 이미지 위에 크롭영역을 그려 봅니다.
public void onDraw(Canvas canvas)
 {
  
  //=========================================//
  //onDraw를 이용하여 Crop영역을 보여준다.
  //=========================================//
  
  canvas.drawBitmap(mBitmap, (mWidth * 1/5)/2, 0, null);
  
  
  //상단 가로줄
  canvas.drawLine(mXLeft, mYTop, mXRight, mYTop, mPaint);
  
  //오른쪽 세로줄
  canvas.drawLine(mXRight, mYTop, mXRight, mYBottom, mPaint);
  
  //왼쪽 세로줄
  canvas.drawLine(mXLeft, mYTop, mXLeft, mYBottom, mPaint);
  
  //하단 가로줄
  canvas.drawLine(mXLeft, mYBottom, mXRight, mYBottom, mPaint);

  //왼쪽상단 아이콘
  canvas.drawBitmap(mLSizeBmp, mXLeft - (mDep ), mYTop- (mDep ), null);
  
  //오른쪽상단 아이콘
  canvas.drawBitmap(mRSizeBmp, mXRight - (mDep ), mYTop- (mDep ), null);
  
  //왼쪽하단 아이콘
  canvas.drawBitmap(mRSizeBmp, mXLeft - (mDep ), mYBottom- (mDep), null);
  
  //오른쪽 하단 아이콘
  canvas.drawBitmap(mLSizeBmp, mXRight - (mDep ), mYBottom- (mDep ), null);

   }

4. 크롭영역을 이미지 영역으로 제한합니다.

//최대 영역- 왼쪽,오른쪽 기준보다 크거나 같을때 제한-
   if(mCropArea>=mXLeft)
   {
    mXLeft=mCropArea;
    //return true;
   }
   if(mWidth-mCropArea<=mXRight)
   {
    mXRight=mWidth-mCropArea;
    //return true;
   }
////Crop영역을 비트맵 크기와 맞추기 위한 변수
//mCropArea = (mWidth * 1/5)/2;
익명사용자 님이 2014년 3월 19일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...