Java 将位图转换为圆形位图的最佳方法是什么
我正在尝试将“矩形”位图转换为带边框的圆形位图。我写了这段代码:Java 将位图转换为圆形位图的最佳方法是什么,java,c#,android,image-processing,bitmap,Java,C#,Android,Image Processing,Bitmap,我正在尝试将“矩形”位图转换为带边框的圆形位图。我写了这段代码: using Android.Graphics; namespace MyNamespace { public static class BitmapExtension { public static Bitmap GetCircularBitmap(this Bitmap bitmap) { Bitmap result = Bitmap.CreateBitmap(bitmap.Width, bi
using Android.Graphics;
namespace MyNamespace
{
public static class BitmapExtension
{
public static Bitmap GetCircularBitmap(this Bitmap bitmap)
{
Bitmap result = Bitmap.CreateBitmap(bitmap.Width, bitmap.Height, Bitmap.Config.Argb8888);
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
Rect rect = new Rect(0, 0, bitmap.Width, bitmap.Height);
paint.AntiAlias = true;
canvas.DrawARGB(0, 0, 0, 0);
paint.Color = Color.Black;
canvas.DrawCircle(bitmap.Width / 2, bitmap.Height / 2, bitmap.Width / 2, paint);
paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.SrcIn));
canvas.DrawBitmap(bitmap, rect, rect, paint);
// Border
paint.SetStyle(Paint.Style.Stroke);
paint.StrokeWidth = 2;
paint.AntiAlias = true;
canvas.DrawCircle(
canvas.Width / 2,
canvas.Width / 2,
canvas.Width / 2 - 2 / 2,
paint);
// Release pixels on original bitmap.
bitmap.Recycle();
return result;
}
}
}
然而,到目前为止,这非常有效,因为这段代码在RecyclerView中使用,有时它画得不对:
如您所见,图像的绘制有点不合适。所以我有两个问题:
我使用了与a一起显示我的图像。它还大大提高了性能,为图像缓存提供了良好的实践。最简单的方法是使用 首先将其添加到yout gradle文件:
依赖项{
...
实现“de.hdodenhof:circleimageview:2.2.0”
}
在XML布局中:
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/image"
android:layout_width="24"
android:layout_height="24"
android:src="@drawable/image"/>
在Java代码中,可以像使用任何其他ImageView一样使用它。最简单的方法是使用 首先将其添加到yout gradle文件:
依赖项{
...
实现“de.hdodenhof:circleimageview:2.2.0”
}
在XML布局中:
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/image"
android:layout_width="24"
android:layout_height="24"
android:src="@drawable/image"/>
在Java代码中,可以像其他ImageView一样使用它。谢谢,我会尝试一下,因为在性能问题上,我对第三方库有点怀疑。我在RecyclerView中使用过,没有遇到任何问题。但也许你可以看看GitHub repo中的代码?我试过了。对于其他应用程序来说,这可能是一个很好的解决方案,但由于我正在以异步方式将图像加载到CircleImageView中,并在返回时使用SetImageBitmap,因此无法实现。在代码从异步请求返回后,图像不会显示(但是它与我在starter post中发布的代码一起工作)。您从哪里加载图像?如果您是从web加载图像,我会说使用毕加索是最好的方法。您不必担心异步任务或加载程序。谢谢,我会尝试一下,因为在性能问题上,我对第三方库有点怀疑。我在RecyclerView中使用过,没有遇到任何问题。但也许你可以看看GitHub repo中的代码?我试过了。对于其他应用程序来说,这可能是一个很好的解决方案,但由于我正在以异步方式将图像加载到CircleImageView中,并在返回时使用SetImageBitmap,因此无法实现。在代码从异步请求返回后,图像不会显示(但是它与我在starter post中发布的代码一起工作)。您从哪里加载图像?如果您是从web加载图像,我会说使用毕加索是最好的方法。您不必担心异步任务或加载程序。第二个结果不是因为第二个图像不是正方形吗?你只需要从切掉它的中心正方形开始,然后使用它。第二个结果不是因为第二个图像不是正方形吗?你只需要从切下它的中心正方形开始,然后使用它。