Bitmap设置圆角(任意角)
来源:互联网 发布:3万元开店淘宝理财 编辑:程序博客网 时间:2024/04/28 13:47
public class BitmapFillet {
public static final int CORNER_NONE = 0;
public static final int CORNER_TOP_LEFT = 1;
public static final int CORNER_TOP_RIGHT = 1 << 1;
public static final int CORNER_BOTTOM_LEFT = 1 << 2;
public static final int CORNER_BOTTOM_RIGHT = 1 << 3;
public static final int CORNER_ALL = CORNER_TOP_LEFT | CORNER_TOP_RIGHT | CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
public static final int CORNER_TOP = CORNER_TOP_LEFT | CORNER_TOP_RIGHT;
public static final int CORNER_BOTTOM = CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
public static final int CORNER_LEFT = CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT;
public static final int CORNER_RIGHT = CORNER_TOP_RIGHT | CORNER_BOTTOM_RIGHT;
public static Bitmap fillet(Bitmap bitmap, int roundPx, int corners) {
try {
// 其原理就是:先建立一个与图片大小相同的透明的Bitmap画板
// 然后在画板上画出一个想要的形状的区域。
// 最后把源图片帖上。
final int width = bitmap.getWidth();
final int height = bitmap.getHeight();
Bitmap paintingBoard = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(paintingBoard);
canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
//画出4个圆角
final RectF rectF = new RectF(0, 0, width, height);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
//把不需要的圆角去掉
int notRoundedCorners = corners ^ CORNER_ALL;
if ((notRoundedCorners & CORNER_TOP_LEFT) != 0) {
clipTopLeft(canvas,paint,roundPx,width,height);
}
if ((notRoundedCorners & CORNER_TOP_RIGHT) != 0) {
clipTopRight(canvas, paint, roundPx, width, height);
}
if ((notRoundedCorners & CORNER_BOTTOM_LEFT) != 0) {
clipBottomLeft(canvas,paint,roundPx,width,height);
}
if ((notRoundedCorners & CORNER_BOTTOM_RIGHT) != 0) {
clipBottomRight(canvas, paint, roundPx, width, height);
}
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//帖子图
final Rect src = new Rect(0, 0, width, height);
final Rect dst = src;
canvas.drawBitmap(bitmap, src, dst, paint);
return paintingBoard;
} catch (Exception exp) {
return bitmap;
}
}
private static void clipTopLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(0, 0, offset, offset);
canvas.drawRect(block, paint);
}
private static void clipTopRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(width - offset, 0, width, offset);
canvas.drawRect(block, paint);
}
private static void clipBottomLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(0, height - offset, offset, height);
canvas.drawRect(block, paint);
}
private static void clipBottomRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(width - offset, height - offset, width, height);
canvas.drawRect(block, paint);
}
}
public static final int CORNER_NONE = 0;
public static final int CORNER_TOP_LEFT = 1;
public static final int CORNER_TOP_RIGHT = 1 << 1;
public static final int CORNER_BOTTOM_LEFT = 1 << 2;
public static final int CORNER_BOTTOM_RIGHT = 1 << 3;
public static final int CORNER_ALL = CORNER_TOP_LEFT | CORNER_TOP_RIGHT | CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
public static final int CORNER_TOP = CORNER_TOP_LEFT | CORNER_TOP_RIGHT;
public static final int CORNER_BOTTOM = CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
public static final int CORNER_LEFT = CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT;
public static final int CORNER_RIGHT = CORNER_TOP_RIGHT | CORNER_BOTTOM_RIGHT;
public static Bitmap fillet(Bitmap bitmap, int roundPx, int corners) {
try {
// 其原理就是:先建立一个与图片大小相同的透明的Bitmap画板
// 然后在画板上画出一个想要的形状的区域。
// 最后把源图片帖上。
final int width = bitmap.getWidth();
final int height = bitmap.getHeight();
Bitmap paintingBoard = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(paintingBoard);
canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
//画出4个圆角
final RectF rectF = new RectF(0, 0, width, height);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
//把不需要的圆角去掉
int notRoundedCorners = corners ^ CORNER_ALL;
if ((notRoundedCorners & CORNER_TOP_LEFT) != 0) {
clipTopLeft(canvas,paint,roundPx,width,height);
}
if ((notRoundedCorners & CORNER_TOP_RIGHT) != 0) {
clipTopRight(canvas, paint, roundPx, width, height);
}
if ((notRoundedCorners & CORNER_BOTTOM_LEFT) != 0) {
clipBottomLeft(canvas,paint,roundPx,width,height);
}
if ((notRoundedCorners & CORNER_BOTTOM_RIGHT) != 0) {
clipBottomRight(canvas, paint, roundPx, width, height);
}
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//帖子图
final Rect src = new Rect(0, 0, width, height);
final Rect dst = src;
canvas.drawBitmap(bitmap, src, dst, paint);
return paintingBoard;
} catch (Exception exp) {
return bitmap;
}
}
private static void clipTopLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(0, 0, offset, offset);
canvas.drawRect(block, paint);
}
private static void clipTopRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(width - offset, 0, width, offset);
canvas.drawRect(block, paint);
}
private static void clipBottomLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(0, height - offset, offset, height);
canvas.drawRect(block, paint);
}
private static void clipBottomRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
final Rect block = new Rect(width - offset, height - offset, width, height);
canvas.drawRect(block, paint);
}
}
阅读全文
0 0
- Bitmap设置圆角(任意角)
- android中对Bitmap图片设置任意角为圆角
- 工作备忘--设置任意控件任意位置的圆角
- 设置控件圆角,任意角 (网址)
- 为UIView任意角设置圆角
- IOS 设置任意控件圆角边框
- CSS3设置任意圆角表格
- iOS 给UIView设置任意圆角
- Android 设置图片 Bitmap任意透明度
- Android 设置图片 Bitmap任意透明度
- Android 设置图片 Bitmap任意透明度
- UIView任意角设置 cornerRedius
- 设置控件圆角,只设置上面两个角的圆角(任意角)
- 设置控件圆角,只设置上面两个角的圆角(任意角)
- bitmap分别设置四角,圆角还是直角,自定义
- Bitmap 任意切割算法
- 任意角度旋转Bitmap
- 设置UIView四个角中任意角的圆角效果
- IPC机制系列之一 IPC简介及Android中的多进程模式
- 基于vue2.0打造移动商城页面实践
- 通过cmd命令查看某个端口的进程pid和并关闭该进程的操作
- algid parse error, not a sequence错误
- 【PAT】【Advanced Level】1067. Sort with Swap(0,*) (25)
- Bitmap设置圆角(任意角)
- Python写一个微信自动回复的机器人
- 技术栈
- Lucene5.x简单示例教程
- 去除select框的默认样式 (包括下拉尖括号)
- Web标准
- 使用java计算一个数的阶乘--递归
- 最优控制LQR求解
- web中过滤器的顺序要注意,中文乱码问题