2012-01-18 5 views
0

У меня есть список изображений. Я закругленные углы моего изображения с помощью этой функции:Android-изображение, размытое вокруг углов

public Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) { 
     Bitmap output = null; 
     try { 
      if(bitmap != null) { 
       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); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return output; 
    } 

Он успешно округляет углы изображения, но углы размыты, грубо и некачественно. Уголки не гладкие. Пример вывода является:

enter image description here

Как это исправить?

ответ

0

Я не вижу никакой проблемы в коде, но я использую этот код:

public static Bitmap roundBitmap(Bitmap bitmap, int radius) { 
    Paint paintForRound = new Paint(); 
    paintForRound.setAntiAlias(true); 
    paintForRound.setColor(0xff424242); 
    paintForRound.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 

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

    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF rectF = new RectF(rect); 

    canvas.drawARGB(0, 0, 0, 0); 
    paintForRound.setXfermode(null); 

    canvas.drawRoundRect(rectF, radius, radius, paintForRound); 

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

    return output; 
} 

Этот код дает пиксельную идеальный результат:

0

использовать радиус угла, используя эта формула

float roundPx = bitmap.getWidth() > bitmap.getHeight() ? ((float) bitmap.getHeight())/6 : ((float) bitmap.getWidth())/6; 
     roundPx = roundPx < 10 ? 10 : roundPx;