目前我正在使用此代码..
public static Bitmap getCircularBitmap(Bitmap bitmap, int borderWidth) {
if (bitmap == null || bitmap.isRecycled()) {
return null;
}
int width = bitmap.getWidth() + borderWidth;
int height = bitmap.getHeight() + borderWidth;
Bitmap canvasBitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(shader);
Canvas canvas = new Canvas(canvasBitmap);
float radius = width > height ? ((float) height) / 2f: ((float) width) / 2f;
canvas.drawCircle(width / 2, height / 2, radius, paint);
paint.setShader(null);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.WHITE);
paint.setStrokeWidth(borderWidth);
canvas.drawCircle(width / 2, height / 2, radius - borderWidth / 2, paint);
return canvasBitmap;
}
它返回一个圆形位图,但图像大小根据实际图像大小而不同。
app的示例图片..
第一个个人资料图片小于第二个。
请帮帮我.. 感谢。
答案 0 :(得分:2)
问题是有些图像很小而有些图像很大,这就是为什么你的方法的位图结果有时大/小。
<强>溶液强>
您需要做的是首先将图像重新调整为默认大小(例如300x300),这样所有图像都具有相同的尺寸,并在重新调整尺寸后将圆形绘制到画布上
您可以使用此方法将位图重新调整为所需的默认大小:
public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth)
{
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
return resizedBitmap;
}
并在getCircularBitmap
方法中使用此功能:
public static Bitmap getCircularBitmap(Bitmap bitmap, int borderWidth) {
if (bitmap == null || bitmap.isRecycled()) {
return null;
}
Bitmap resizedBitmap = getResizedBitmap(bitmap, 300, 300); //pick you default size
.
.
.