繁体   English   中英

如何在位图画布中将圆形转换为方形图像? Android Studio

[英]How to Convert Circle to Square image in bitmap canvas? Android Studio

我需要更改图像,从圆形到正常方形。

我是编程的几个星期的初学者,我在这段代码中停了两天,有人知道如何改变吗?

我已经尝试了一切,但我无法解决

我对帆布一无所知,我已经研究过要解决这个问题,但我仍然无法做到

public static Bitmap getCircleBitmap(Bitmap bitmap) {
    final int scaledWidth = 100;
    final int scaledHeight = 100;

    bitmap = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);
    Bitmap output;
    Rect srcRect, dstRect;

    float r;
    final int width = bitmap.getWidth();
    final int height = bitmap.getHeight();

    if (width > height) {
        output = Bitmap.createBitmap(height, height, Bitmap.Config.ARGB_8888);
        int left = (width - height) / 2;
        int right = left + height;
        srcRect = new Rect(left, 0, right, height);
        dstRect = new Rect(0, 0, height, height);
        r = height / 2;
    } else {
        output = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
        int top = (height - width) / 2;
        int bottom = top + width;
        srcRect = new Rect(0, top, width, bottom);
        dstRect = new Rect(0, 0, width, width);
        r = width / 2;
    }

    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);


    paint.setColor(color);
    canvas.drawCircle(r, r, r, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, srcRect, dstRect, paint);

    bitmap.recycle();

    return output;

}

public static Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) {
    Drawable drawable = AppCompatResources.getDrawable(context, drawableId);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        drawable = (DrawableCompat.wrap(drawable)).mutate();
    }

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
            drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

}

如果你查看你的代码,在方法getCircleBitmap()的末尾你有下面的代码行:

canvas.drawCircle(r, r, r, paint);

这是使用DrawCircle为您绘制圆形图像的那个。 你可以做的是,用DrawRect替换它。 那应该为你做这个伎俩。

但是,如果您只需要从矢量绘制方形图像,则可以直接使用标准ImageView并将矢量用作图像资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM