2016-12-12 3 views
3

enter image description here私はピンチIN-OUTズームと円形クロップ画像でカスタムImageViewを作成しています。ピンチインインはうまく動いていますが、画像を切り取ろうとするとパーティクルサークル画像を取得できません。 onTuchListenerに基づくピンチインインアウトとキャンバスクラスに基づく循環クロッピングを使用しています。トリミングのための
キャンバスの円形イメージを使用して特定のトリミングイメージを取得するにはどうすればよいですか?

@Override 
    protected void onDraw(Canvas canvas) { 
     onDrawReady = true; 
     imageRenderedAtLeastOnce = true; 
     if (delayedZoomVariables != null) { 
      setZoom(delayedZoomVariables.scale, delayedZoomVariables.focusX, delayedZoomVariables.focusY, delayedZoomVariables.scaleType); 
      delayedZoomVariables = null; 
     } 
     super.onDraw(canvas); 

     if (bitmap == null) { 
      circleWindowFrame(); //Creating circle view 
     } 
     canvas.drawBitmap(bitmap, 0, 0, null); 
    } 

    protected void circleWindowFrame() { 
     bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas osCanvas = new Canvas(bitmap); 

     RectF outerRectangle = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight()); 

     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(getResources().getColor(R.color.overlay)); 
     paint.setAlpha(99); 
     osCanvas.drawRect(outerRectangle, paint); 

     paint.setColor(Color.TRANSPARENT); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT)); 
     float centerX = getWidth()/2; 
     float centerY = getHeight()/2; 

     DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
     int width = metrics.widthPixels; 
     float radius = width/2; 
     osCanvas.drawCircle(centerX, centerY, radius, paint); 
    } 

このコード:

Iは、インアウトやサークルのトリミング画像ピンチのために言及したコードの下に使用している...アドバンス用

public static Bitmap getCrop() { 
     Bitmap circleBitmap; 
     circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
     Paint paint = new Paint(); 
     paint.setShader(shader); 
     paint.setAntiAlias(true); 
     Canvas c = new Canvas(circleBitmap); 
     c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); 
     return bitmap; 
    } 

おかげ

+0

https://github.com/vinc3m1/RoundedImageView円画像にこのライブラリを使用 –

+0

いいえ、円のクロップ画像が必要です。 **添付の画像を見てください。** –

+0

私の答えを確認しました –

答えて

1

試着する

public static Bitmap toOvalBitmap(@NonNull Bitmap bitmap) { 
     int width = bitmap.getWidth(); 
     int height = bitmap.getHeight(); 
     Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

     Canvas canvas = new Canvas(output); 

     int color = 0xff424242; 
     Paint paint = new Paint(); 

     paint.setAntiAlias(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 

     RectF rect = new RectF(0, 0, width, height); 
     canvas.drawOval(rect, paint); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, 0, 0, paint); 

     bitmap.recycle(); 

     return output; 
    } 
+0

選択したオーバーレイ円形領域を切り取る必要があります。 **しかし、あなたの例は完全な画像を切り取っています。** –

+0

私はあなたのgetCrop()メソッドの代わりに私のメソッドを使用しましたか? –

+0

あなたの質問では、それは正しくクロップされていないと言った、私はクロッピングメソッドだったので、私はあなたの方法は、画像の所望のオーバーレイ領域をトリミングしていたという事実を与え、あなたのために動作するはずだと思います –

関連する問題