java - 如何在android中从不同形状的位图中切出一个圆圈

标签 java android bitmap

如何在 android 中从不同形状的位图中剪切一个圆。

我试过这段代码,但有些图像被拉伸(stretch)了:

    public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
    int targetWidth = 240;
    int targetHeight = 200;
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth,
            targetHeight,Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
    path.addCircle(((float) targetWidth - 1) / 2,
            ((float) targetHeight - 1) / 2,
            (Math.min(((float) targetWidth),
                    ((float) targetHeight)) / 2),
            Path.Direction.CCW);

    canvas.clipPath(path);
    Bitmap sourceBitmap = scaleBitmapImage;
    canvas.drawBitmap(sourceBitmap,new Rect(0, 0, sourceBitmap.getWidth(),
                    sourceBitmap.getHeight()),
            new Rect(0, 0, targetWidth, targetHeight), null);
    return targetBitmap;
}

最佳答案

如果要对图像进行圆形切割,则需要找到以图像为中心的最大正方形。考虑到这一点,以下行解决了您的拉伸(stretch)问题:

Bitmap bitmap = ThumbnailUtils.extractThumbnail(bitmap, radius, radius, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

此方法创建目标位图的圆形切割:

private Bitmap getCircularBitmap(int radius, Bitmap bitmap) {
    Bitmap.Config conf = Bitmap.Config.ARGB_8888;
    Bitmap bmp = Bitmap.createBitmap(radius, radius, conf);
    Canvas canvas = new Canvas(bmp);

    // creates a centered bitmap of the desired size
    bitmap = ThumbnailUtils.extractThumbnail(bitmap, radius, radius, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
    BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    Paint paint = new Paint();
    paint.setAntiAlias(true);

    paint.setShader(shader);
    RectF rect = new RectF(0, 0, radius, radius);
    canvas.drawRoundRect(rect, radius, radius, paint);

    return bmp;
}

关于java - 如何在android中从不同形状的位图中切出一个圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29221769/

相关文章:

Java从多次存在的config.properties文件中获取某个属性

javascript - Android 在重定向 webview 中执行 JavaScript

android - 墙纸更换事件

java - 在 Eclipse 中运行时,对我的代码的编辑不会显示

java - 检查网页是否已经下载

c++ - GDI - 如何创建和填充位图?

c# - 在位图上绘制长字符串会导致绘制问题

java - 如何从 URL 加载图像到 Java Android?代码没有错误,但是不起作用

java - 以编程方式在 RecyclerView 项目(项目中的某个元素)上设置背景颜色

android - 如何请求振动许可?