gpt4 book ai didi

java - 将位图转换为圆形位图的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-02 02:11:21 25 4
gpt4 key购买 nike

我正在尝试将“矩形”位图转换为带边框的圆形位图。我写了这段代码:

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 中使用,有时它无法正确绘制:

Image draw out of place.

正如您所看到的,图像绘制得有点不合适。所以我有两个问题:

  1. 是什么原因导致这种奇怪的行为发生?
  2. 有没有办法改进我的 GetCircularBitmap 方法?由于性能很重要,因此它必须非常快。

更新:解决方案

我用了FFImageLoadingCircle Transformation 一起显示我的图像。它还大大提高了性能,并为图像缓存提供了良好的实践。

最佳答案

最简单的方法是使用 CircleImageView

首先将其添加到您的 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 一样使用它。

关于java - 将位图转换为圆形位图的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49997438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com