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