将图像更改为圆角

时间:2012-03-01 13:54:29

标签: android json image

我有一个包含一些项目的列表视图。在我的listview中,我使用自定义适配器来显示带有图像的项目。我在项目中的图片来自JSON我的图片就像这样 -

Needed

现在,我只需要圆角的图像。我如何实现这一目标?

4 个答案:

答案 0 :(得分:9)

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
        bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = 12;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;
  }

http://ruibm.com/?p=184

中提取的代码

答案 1 :(得分:1)

Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded    
int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight();

在大多数情况下,我们必须确保圆角具有Alpha通道

Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(rounder);    

我们最终将使用porter-duff xfer模式应用此绘制。 这将允许我们仅覆盖某些像素。 RED是任意的。这可以是任何完全不透明的颜色(alpha = 255)

Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
xferPaint.setColor(Color.RED);

我们只是重复使用xferPaint来绘制一个看起来很正常的圆形框,而20.f是我们正在舍入的数量。

  

canvas.drawRoundRect(new RectF(0,0,w,h),20.0f,20.0f,xferPaint);

现在我们将'魔术酱'应用于油漆

xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
Now apply this bitmap ontop of your image:

canvas.drawBitmap(myCoolBitmap, 0,0, null);
canvas.drawBitmap(rounder, 0, 0, xferPaint);

答案 2 :(得分:1)

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {

    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
            .getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = pixels;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;
}

答案 3 :(得分:0)

查看以前的thread,如何获得位图图像的圆角边缘的精彩答案。