2013-10-06 2 views
2

그물을 검색했지만 도움이되지 않았습니다.직사각형 대신 원형 자르기 기능이 필요합니다.

카메라를 호출하여 이미지를 캡처하고 자르고 싶습니다. 하지만 그 대신에 직사각형 자르기 (이미지에서 제공) 도구 대신 원형 1 (두 번째 이미지)이 필요합니다.

참고 : 첫 번째 이미지에서는 사각형 영역을 잘라내어 다른 기능을 사용하여 순환 방식으로 표시합니다.
이미지 2는 원형 이미지의 자르기 이미지입니다.

enter image description here

I 그물에있는 모든

enter image description here

이 직사각형 도구를 사용하여 자른 후 원형도의 화상을 표시하는 것이다.
public Bitmap getCircleBitmap(Bitmap bitmap, int pixels) { 
     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
       bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(output); 

     final int color = 0xffff0000; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
     final RectF rectF = new RectF(rect); 

     paint.setAntiAlias(true); 
     paint.setDither(true); 
     paint.setFilterBitmap(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 
     canvas.drawOval(rectF, paint); 

     paint.setColor(Color.BLUE); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth((float) 4); 
     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, rect, rect, paint); 
     return output; 
    } 

그래서 당신이 볼 수 -

내가 onActivityResult를 함수에서 뭐하는 거지

기능은 다음과 같습니다 코드 GraphicsUtil에 대한

   case CROP_FROM_CAMERA:   
       Bundle extras = data.getExtras(); 

       if (extras != null) 
       {    
        Bitmap photo = extras.getParcelable("data"); 
         //this method convert the rectangular cropped image to circular display. 
        GraphicsUtil gu= new GraphicsUtil(); 
        Bitmap output = gu.getCircleBitmap(photo,16); 
        mImageView.setImageBitmap(output); 

        } 

       File f = new File(mImageCaptureUri.getPath()); 
       if (f.exists()) f.delete(); 
       break; 

을 - 이것도 (그러나 나는 원형 형태로 자르려). 이미지는 직사각형으로 자른 다음 순환 방식으로 표시하는 함수로 전달됩니다.
GraphicUtil 함수를 사용하지 않고 CROP_FROM_CAMERA 의도에 의해 순환 방식으로 이미지를 잘라내 길 원합니다. 난 당신이 카메라에서 이미지를 얻을 수 있습니다 가정합니다

나는 아직이 시도하지 않은,하지만 작동합니다

+0

원하는대로 이미지가 잘린 비트 맵이 있다면 무엇을 묻고 있습니까? 작물을 어디에서 자고 싶니? – Dave

+0

더 명확하게하기 위해 질문을 편집했습니다. 희망을 얻고 싶습니다. – User42

+1

내장 된 자르기 도구가 다른 기능을 갖기를 원하십니까? – Dave

답변

5

다른 제조업체가 카메라 용 인터페이스를 구현하기 때문에 아래의 첫 번째 방법은 모든 경우에 작동하지 않습니다. 예를 들어 내 Nexus S는 2.3.6을 실행하고 Galaxy Nexus는 4.3을 사용하지 않았습니다. 기본 작물 액션에서 순환 방식에 이미지를 자르 할 수 있도록하려면 어쨌든, 다음과 같은 방법으로 호출 :

Intent intent = new Intent("com.android.camera.action.CROP"); 
intent.setType("image/*"); 
intent.setData(imageUri); // Uri to the image you want to crop 
intent.putExtra("outputX", Constants.PROFILE_PICTURE_SIZE); 
intent.putExtra("outputY", Constants.PROFILE_PICTURE_SIZE); 
intent.putExtra("aspectX", 1); 
intent.putExtra("aspectY", 1); 
intent.putExtra("scale", true); 
intent.putExtra("circleCrop", new String("")); 
intent.putExtra("return-data", false); 
File cropImageFile = new File(CROP_IMAGE_PATH); // Path to save the cropped image 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(cropImageFile)); 
startActivityForResult(intent, CROP); // CROP = Code to track the result in onActivityResult 

이 같이 표시됩니다 기본 작물 응용 프로그램을 시작해야합니다 Circular cropping

이 게시물을 commonsware으로 읽었다면이 기능이 항상 작동하지 않는다는 것을 알고 있습니다. 나는 그의 게시물에서 도서관 중 하나를 포함하는 것이 좋습니다. lvillani에서 첫 번째는 CropImage 활동 추출 된 AOSP입니다. 도서관을 포함시키고 위와 비슷한 의도로 도서관에 전화하십시오.인 텐트에 circleCrop 매개 변수를 포함해야합니다.

+2

고마워요. 그게 정확히 내가 필요한 것입니다 :). 여기에 +50 점이 있습니다. – User42

+0

줄 intent.putExtra ("outputX", Constants.PROFILE_PICTURE_SIZE)에서 "Constants.PROFILE_PICTURE_SIZE"의 역할을 알려주십시오. – User42

+0

내 프로젝트에서 @ User42, 그 상수는 600 (픽셀)의 값을 가진 정수입니다 –

0

.... 해당 이미지가 있으면 다음과 같이 진행할 수 있습니다.

Canvas을 새 비트 맵에 그리십시오. Path 개체를 만들고 addCircle으로 전화하십시오. Canvas에 번으로 전화하여 Path 번을 전달하십시오. 이제 카메라 이미지를 Canvas에 그려야하며 클리핑 영역 내부에만 그려야합니다. Canvas의 잠금을 해제하고 새 이미지 Bitmap을 사용하여 원하는 이미지 유형을 저장하십시오. 적절한 자원을 폐기하십시오.

2
BitmapShader shader; 
    shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, 
      Shader.TileMode.CLAMP); 

    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setShader(shader); 

    RectF rect = new RectF(0.0f, 0.0f, width, height); 

    Bitmap circularBitmap = Bitmap.createBitmap(width, height, 
      Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(circularBitmap); 

    canvas.drawArc(rect, 0, 360, true, paint); 

이제 circularBitmap에 순환 이미지가 있습니다.

관련 문제