制作圆形头像的方法有多种,以下是一些常用的编程实现方式:
1. 使用Paint的Xfermode
在Android开发中,可以使用`Paint`的`setXfermode`方法来实现圆形头像。具体步骤如下:
1. 获取Bitmap并计算缩放比例。
2. 设置`Paint`的`setXfermode`为`SRC_IN`。
3. 在`onDraw`方法中绘制Bitmap,只显示原图的圆形部分。
```java
protected void onDraw(Canvas canvas) {
Bitmap bitmap = mWeakBitmap == null ? null : mWeakBitmap.get();
if (bitmap == null || bitmap.isRecycled()) {
Drawable drawable = getDrawable();
int dWidth = drawable.getIntrinsicWidth();
int dHeight = drawable.getIntrinsicHeight();
bitmap = Bitmap.createBitmap(dWidth, dHeight, Bitmap.Config.ARGB_8888);
Canvas tempCanvas = new Canvas(bitmap);
drawable.setBounds(0, 0, dWidth, dHeight);
drawable.draw(tempCanvas);
}
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
int width = getWidth();
int height = getHeight();
canvas.drawCircle(width / 2, height / 2, Math.min(width, height) / 2, paint);
canvas.drawBitmap(bitmap, 0, 0, null);
}
```
2. 使用BitmapShader
另一种方法是使用`BitmapShader`来实现圆形头像。具体步骤如下:
1. 创建一个圆形的BitmapShader。
2. 将原图绘制到Bitmap上,并设置Shader。
3. 在`onDraw`方法中绘制带有Shader的Bitmap。
```java
BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
shader.setLocalMatrix(new Matrix());
shader.setLocalMatrix(new Matrix().setScale(width / (float) bitmap.getWidth(), height / (float) bitmap.getHeight()));
Paint paint = new Paint();
paint.setShader(shader);
paint.setAntiAlias(true);
int width = getWidth();
int height = getHeight();
canvas.drawCircle(width / 2, height / 2, Math.min(width, height) / 2, paint);
```
3. 使用mask掩膜
在图像处理中,可以使用mask掩膜来实现圆形头像。具体步骤如下:
1. 创建一个圆形掩码。
2. 将掩码应用到原图上,保留圆形部分。
3. 将掩码与原图相加,得到圆形头像。
```python
import cv2
import numpy as np
image = cv2.imread('sample1.jpg')
roi = np.zeros(image.shape[:2], np.uint8)
cv2.circle(roi, (200, 200), 150, 255, cv2.FILLED)
mask = np.ones_like(image) * 255
mask1 = cv2.bitwise_and(mask, image, mask=roi)
mask2 = cv2.bitwise_and(mask, mask, mask=~roi)
out = mask1 + mask2
cv2.imshow('out', out)
cv2.waitKey(0)
```
4. 使用第三方库
在Android开发中,可以使用第三方库如`RoundedImageView`来快速实现圆形头像效果。首先,在`build.gradle`文件中添加依赖:
```groovy
dependencies {
implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar'
}
```
然后在布局文件中使用`RoundedImageView`: