Android 如何使用画布圆形图像获得特定裁剪图像?

Android 如何使用画布圆形图像获得特定裁剪图像?,android,imageview,android-canvas,Android,Imageview,Android Canvas,我正在创建一个带有缩进-缩进缩放和圆形裁剪图像的自定义图像视图。缩进-缩进效果很好,但当我尝试裁剪图像时,无法获得特定的圆形图像。我使用的是基于OnTouchListener的收缩输出工作和基于canvas类的循环裁剪。 我使用了以下提到的代码来进行缩进和循环裁剪图像: 此代码用于裁剪: public static Bitmap getCrop() { Bitmap circleBitmap; circleBitmap = Bitmap.createBitma

我正在创建一个带有缩进-缩进缩放和圆形裁剪图像的自定义图像视图。缩进-缩进效果很好,但当我尝试裁剪图像时,无法获得特定的圆形图像。我使用的是基于OnTouchListener的收缩输出工作和基于canvas类的循环裁剪。

我使用了以下提到的代码来进行缩进和循环裁剪图像:

此代码用于裁剪:

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;
    }
感谢您的帮助…

试试这个

 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;
    }

将此库用于圆形图像否,我需要圆形裁剪图像。请参阅附件中的图片。您是否检查了我的回答?我需要裁剪选定的覆盖圆形区域。但是你的例子是裁剪整个图像。你用我的方法而不是你的getCrop()方法吗?在你的问题中,你说它裁剪不正确,我所做的是一种裁剪方法,所以我认为它应该适合你,因为你的方法是裁剪图像所需的覆盖区域。去看看这个库吧,尽管你必须更改一些参数以获得所需的结果,但这肯定会帮到你。耐心点,兄弟,我增加了缩放功能。所以你的方法是裁剪整个图像。但是我需要在放大和缩小后裁剪突出显示的区域图像。我知道getCrop()工作不正常。
 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;
    }