Android 如何将位图转换为RoundRect位图? 我正在尝试将位图转换为RoundRect形状。我很困惑如何使用它
如果我先抽出来就可以了Android 如何将位图转换为RoundRect位图? 我正在尝试将位图转换为RoundRect形状。我很困惑如何使用它,android,canvas,bitmap,drawable,paint,Android,Canvas,Bitmap,Drawable,Paint,如果我先抽出来就可以了 public Bitmap transform(Bitmap bitmap) { Drawable drawable = new BitmapDrawable(Resources.getSystem(), bitmap); Bitmap destBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canv
public Bitmap transform(Bitmap bitmap) {
Drawable drawable = new BitmapDrawable(Resources.getSystem(), bitmap);
Bitmap destBitmap = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(destBitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
RectF srcRect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
canvas.drawRoundRect(srcRect, mRadiusX, mRadiusY, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.saveLayer(srcRect, paint, Canvas.ALL_SAVE_FLAG);
drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
drawable.draw(canvas);
canvas.restore();
return destBitmap;
}
但是,如果我先画位图就不行了。为什么?
public Bitmap transform(Bitmap bitmap) {
Drawable drawable = new BitmapDrawable(Resources.getSystem(), bitmap);
Bitmap destBitmap = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(destBitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
RectF srcRect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
drawable.draw(canvas);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.saveLayer(srcRect, paint, Canvas.ALL_SAVE_FLAG);
canvas.drawRoundRect(srcRect, mRadiusX, mRadiusY, paint);
canvas.restore();
return destBitmap;
}
另外,我不想创建新位图,我可以直接在位图上绘制roundRect来转换roundRect形状吗?像这样:
public Bitmap transform(Bitmap bitmap) {
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL_AND_STROKE);
Path path = new Path();
path.addRoundRect(0, 0, bitmap.getWidth(), bitmap.getHeight(),50, 50,
Path.Direction.CW);
canvas.clipPath(path);
return bitmap;
}
不起作用
我有一些问题:
只需使用
BitmapShader
-您不需要任何saveLayer
/restore
和PorterDuffXfermode
,如果您不确定如何使用BitmapShader
请参阅RoundedBitmapDrawable
源代码file@pskink非常感谢,我将看到RoundedBitmapDrawable源代码。但我真的想知道为什么它不起作用。我使用drawRoundRect,在中选择Mode.SRC_,然后绘制位图,可以获得roundrect位图,但我更改了顺序,首先绘制位图,在中选择Mode.DST_,然后绘制roundrect,失败了。我认为它们应该是相同的。只需使用位图着色器
-您不需要任何保存层
/还原
和PorterDuffXfermode
,如果您不确定如何使用位图着色器
请参阅RoundedBitmapDrawable
源代码file@pskink多谢各位,我将看到RoundedBitmapDrawable源代码。但我真的想知道为什么它不起作用。我使用drawRoundRect,在中选择Mode.SRC_,然后绘制位图,可以获得roundrect位图,但我更改了顺序,首先绘制位图,在中选择Mode.DST_,然后绘制roundrect,失败了。我想他们应该是一样的。
public Bitmap transform(Bitmap bitmap) {
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL_AND_STROKE);
Path path = new Path();
path.addRoundRect(0, 0, bitmap.getWidth(), bitmap.getHeight(),50, 50,
Path.Direction.CW);
canvas.clipPath(path);
return bitmap;
}