Изменение изображения как закругленный угол - PullRequest
4 голосов
/ 01 марта 2012

У меня один просмотр списка с некоторыми предметами. В моем списке просмотра я использую пользовательский адаптер для отображения элементов с изображениями. Мои изображения в элементах приходят с JSON Мои изображения такие -

Needed

Теперь мне просто нужно изображение с закругленным углом. Как мне этого добиться?

Ответы [ 4 ]

9 голосов
/ 01 марта 2012
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 голос
/ 01 марта 2012
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;
}
1 голос
/ 01 марта 2012
Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded    
int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight();

Мы должны убедиться, что наши закругленные углы в большинстве случаев имеют альфа-канал

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

Мы собираемся применить эту краску в конечном итоге, используя режим x-porter-duff.Это позволит нам перезаписывать только определенные пиксели.Красный является произвольным.Это может быть любой непрозрачный цвет (альфа = 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);
0 голосов
/ 01 марта 2012

Проверьте этот предыдущий поток , блестящий ответ о том, как получить закругленные края для растровых изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...