如何从不同大小的图像生成统一大小的圆形位图

时间:2014-08-22 05:55:04

标签: android image-processing canvas bitmap

目前我正在使用此代码..

            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的示例图片..

enter image description here

第一个个人资料图片小于第二个。

请帮帮我.. 感谢。

1 个答案:

答案 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
     .
     .
     .