猿问

从Android中的位图裁剪圆形区域

从Android中的位图裁剪圆形区域

我有一个位图,我想从这个位图裁剪一个圆形区域。圆圈外的所有像素都应该是透明的。我怎样才能做到这一点?



繁星淼淼
浏览 592回答 3
3回答

慕桂英3389331

经过长时间的头脑风暴,我找到了解决方案public Bitmap getCroppedBitmap(Bitmap bitmap) {     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),             bitmap.getHeight(), Config.ARGB_8888);     Canvas canvas = new Canvas(output);     final int color = 0xff424242;     final Paint paint = new Paint();     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());     paint.setAntiAlias(true);     canvas.drawARGB(0, 0, 0, 0);     paint.setColor(color);     // canvas.drawRoundRect(rectF, roundPx, roundPx, paint);     canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,             bitmap.getWidth() / 2, paint);     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     canvas.drawBitmap(bitmap, rect, rect, paint);     //Bitmap _bmp = Bitmap.createScaledBitmap(output, 60, 60, false);     //return _bmp;     return output;}

潇湘沐

从矩形生成圆public static Bitmap getCircularBitmap(Bitmap bitmap) {     Bitmap output;     if (bitmap.getWidth() > bitmap.getHeight()) {         output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Config.ARGB_8888);     } else {         output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Config.ARGB_8888);     }     Canvas canvas = new Canvas(output);     final int color = 0xff424242;     final Paint paint = new Paint();     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());     float r = 0;     if (bitmap.getWidth() > bitmap.getHeight()) {         r = bitmap.getHeight() / 2;     } else {         r = bitmap.getWidth() / 2;     }     paint.setAntiAlias(true);     canvas.drawARGB(0, 0, 0, 0);     paint.setColor(color);     canvas.drawCircle(r, r, r, paint);     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     canvas.drawBitmap(bitmap, rect, rect, paint);     return output;}

慕标琳琳

建议使用clipPath选项将图像裁剪成圆圈。以下是这个的干净实现:    public static Bitmap GetBitmapClippedCircle(Bitmap bitmap) {         final int width = bitmap.getWidth();         final int height = bitmap.getHeight();         final Bitmap outputBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);         final Path path = new Path();         path.addCircle(                   (float)(width / 2)                 , (float)(height / 2)                 , (float) Math.min(width, (height / 2))                 , Path.Direction.CCW);         final Canvas canvas = new Canvas(outputBitmap);         canvas.clipPath(path);         canvas.drawBitmap(bitmap, 0, 0, null);         return outputBitmap;     }这可以添加到实用程序类中。
随时随地看视频慕课网APP

相关分类

Android
我要回答