Android项目中的BitMapUtil 将图片/bitmap方形转变成圆形
来源:互联网 发布:宽带网络套餐十机顶盒 编辑:程序博客网 时间:2024/06/08 15:58
public class BitMapUtil { private static final Options OPTIONS_GET_SIZE = new Options (); private static final Options OPTIONS_DECODE = new Options (); private static final byte[] LOCKED = new byte[0]; // 此对象用来保持Bitmap的回收顺序,保证最后使用的图片被回收 private static final LinkedList CACHE_ENTRIES = new LinkedList (); // 线程请求创建图片的队列 private static final Queue TASK_QUEUE = new LinkedList (); // 保存队列中正在处理的图片的key,有效防止重复添加到请求创建队列 private static final Set TASK_QUEUE_INDEX = new HashSet (); // 缓存Bitmap private static final Map IMG_CACHE_INDEX = new HashMap (); // 通过图片路径,图片大小 // 缓存图片的大小 private static int CACHE_SIZE = 20; // 缓存图片数量 static { OPTIONS_GET_SIZE.inJustDecodeBounds = true; // 初始化创建图片线程,并等待处理 new Thread () { { setDaemon (true); } public void run(){ while (true) { synchronized (TASK_QUEUE) { if (TASK_QUEUE.isEmpty ()) { try { TASK_QUEUE.wait (); } catch (InterruptedException e) { e.printStackTrace (); } } } QueueEntry entry = (QueueEntry) TASK_QUEUE.poll (); String key = createKey (entry.path); TASK_QUEUE_INDEX.remove (key); } } }.start (); } public static Bitmap getBitmap(String path){ if (path == null) { return null; } Bitmap bitMap = null; try { if (CACHE_ENTRIES.size () >= CACHE_SIZE) { destoryLast (); } bitMap = useBitmap (path); if (bitMap != null && !bitMap.isRecycled ()) { return bitMap; } bitMap = createBitmap (path); String key = createKey (path); synchronized (LOCKED) { IMG_CACHE_INDEX.put (key, bitMap); CACHE_ENTRIES.addFirst (key); } } catch (OutOfMemoryError err) { destoryLast (); return createBitmap (path); } return bitMap; } // ------------------------------------------------------------------ private Methods // 将图片加入队列头 private static Bitmap useBitmap(String path){ Bitmap bitMap = null; String key = createKey (path); synchronized (LOCKED) { bitMap = (Bitmap) IMG_CACHE_INDEX.get (key); if (null != bitMap) { if (CACHE_ENTRIES.remove (key)) { CACHE_ENTRIES.addFirst (key); } } } return bitMap; } // 回收最后一张图片 private static void destoryLast(){ synchronized (LOCKED) { String key = (String) CACHE_ENTRIES.removeLast (); if (key.length () > 0) { Bitmap bitMap = (Bitmap) IMG_CACHE_INDEX.remove (key); if (bitMap != null && !bitMap.isRecycled ()) { bitMap.recycle (); bitMap = null; } } } } // 创建键 private static String createKey(String path){ if (null == path || path.length () == 0) { return ""; } return path; } // 通过图片路径,宽度高度创建一个Bitmap对象 private static Bitmap createBitmap(String path){ return PictureUtils.getBitmapByPath (path); } // 队列缓存参数对象 static class QueueEntry { public String path; } /** * *@Description: TODO(将四方形的图片转换成为圆形图片) *@Author: 郭永振 *@Since: 2016-10-19下午12:11:05 *@param bitmap *@return */ public static Bitmap toRoundBitmap(Bitmap bitmap) { //圆形图片宽高 int width = bitmap.getWidth(); int height = bitmap.getHeight(); //正方形的边长 int r = 0; //取最短边做边长 if(width > height) { r = height; } else { r = width; } //构建一个bitmap Bitmap backgroundBmp = Bitmap.createBitmap(width, height, Config.ARGB_8888); //new一个Canvas,在backgroundBmp上画图 Canvas canvas = new Canvas(backgroundBmp); Paint paint = new Paint(); //设置边缘光滑,去掉锯齿 paint.setAntiAlias(true); //宽高相等,即正方形 RectF rect = new RectF(0, 0, r, r); //通过制定的rect画一个圆角矩形,当圆角X轴方向的半径等于Y轴方向的半径时, //且都等于r/2时,画出来的圆角矩形就是圆形 canvas.drawRoundRect(rect, r/2, r/2, paint); //设置当两个图形相交时的模式,SRC_IN为取SRC图形相交的部分,多余的将被去掉 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); //canvas将bitmap画在backgroundBmp上 canvas.drawBitmap(bitmap, null, rect, paint); //返回已经绘画好的backgroundBmp return backgroundBmp; }}
0 0
- Android项目中的BitMapUtil 将图片/bitmap方形转变成圆形
- 如何将方形图片磨成圆形图片
- 将方形图片转换成为圆形图片的工具类
- Android开发,将图片(bitmap)变成圆形图片、图片文件变成bitmap的方法
- Android Drawable 实现圆形,方形圆角图片
- 方形图片转为圆形头像
- 自定义圆形方形图片边框
- Android将BitMap转化为圆形
- iOS-方形图片设置成圆形图片
- Android中使用Bitmap类将矩形图片转为圆形的方法
- Android 将Bitmap转换成圆形图片的几个方法总结
- 使用CSS3 将方形转换成圆形
- css圆形图片处理示例(方形图片变圆形图片)
- Android将图片打成圆形
- 方形图片使用QLabel显示成圆形
- iOS方形图片裁剪成圆形
- android 将sdcard中的图片转换成Bitmap 和Drawable
- android将drawable文件夹中的图片读取到bitmap中
- 从android aidl理解Proxy/stub模式
- SpringMVC + MyBatis整合
- Win7运行命令大全
- Fiddler 的一些技巧分享
- python学习笔记2
- Android项目中的BitMapUtil 将图片/bitmap方形转变成圆形
- Codeforces Round #404 (Div. 2) C. Anton and Fairy Tale
- smb服务器安装与使用
- spring中ClassPathXmlApplicationContext 和FileSystemXmlApplicationContext的区别
- ios获取系统信息的详细api
- Linux下配置服务器节点上的时区
- 94 Binary Tree Inorder Traversal 【递归和迭代的对比较分析】
- postgresql中wal日志什么时候会触发归档
- 多行截断