Android: how to programmatically round only top corners of a bitmap?

匿名 (未验证) 提交于 2019-12-03 03:10:03

问题:

I'm currently using this code:

@Override public Bitmap transform(Bitmap source) {     Bitmap result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);     Canvas canvas = new Canvas(result);      final int color = 0xff424242;     final Paint paint = new Paint();     final Rect rect = new Rect(0, 0, source.getWidth(),source.getHeight());     final RectF rectF = new RectF(rect);      final float scale = context.getResources().getDisplayMetrics().density;     final float roundDp = 10 * scale;      paint.setAntiAlias(true);     canvas.drawARGB(0, 0, 0, 0);     paint.setColor(color);     canvas.drawRoundRect(rectF, roundDp, roundDp, paint);      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     canvas.drawBitmap(source, rect, rect, paint);     source.recycle();     return result; } 

But the problem is that this method only allows me to modify all 4 corners at once. How would I round only the bottom corners of the image?

回答1:

Here is your answer: https://stackoverflow.com/a/5252726/1969801

public static Bitmap getRoundedCornerBitmap(Context context, Bitmap input, int pixels , int w , int h , boolean squareTL, boolean squareTR, boolean squareBL, boolean squareBR  ) {  Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(output); final float densityMultiplier = context.getResources().getDisplayMetrics().density;  final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, w, h); final RectF rectF = new RectF(rect);  //make sure that our rounded corner is scaled appropriately final float roundPx = pixels*densityMultiplier;  paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint);   //draw rectangles over the corners we want to be square if (squareTL ){     canvas.drawRect(0, 0, w/2, h/2, paint); } if (squareTR ){     canvas.drawRect(w/2, 0, w, h/2, paint); } if (squareBL ){     canvas.drawRect(0, h/2, w/2, h, paint); } if (squareBR ){     canvas.drawRect(w/2, h/2, w, h, paint); }  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(input, 0,0, paint);  return output;  } 

And the onDraw function:

 @Override  protected void onDraw(Canvas canvas) { //super.onDraw(canvas);     Drawable drawable = getDrawable();      Bitmap b =  ((BitmapDrawable)drawable).getBitmap() ;     Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);      int w = getWidth(), h = getHeight();       Bitmap roundBitmap =  CropImageView.getRoundedCornerBitmap( getContext(), bitmap,10 , w, h , true, false,true, false);     canvas.drawBitmap(roundBitmap, 0,0 , null); } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!