android中图片的处理(绘制圆形,圆角||缩略图)
来源:互联网 发布:传奇数据库编辑器 编辑:程序博客网 时间:2024/05/09 16:07
/** * 圆角处理 * * @param bitmap * 原图 * @param roundPx * 角度 * @return */ public static Bitmap getCornerBitmap(Bitmap bitmap, float roundPx) { if (bitmap == null) return null; // todo:to prevent memory overflow, suspend the processing of fillet // 创建一个指定宽度和高度的空位图对象 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); // 用该位图创建画布 Canvas canvas = new Canvas(output); // 画笔对象 final Paint paint = new Paint(); // 画笔的颜色 final int color = 0xff424242; // 矩形区域对象 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); // 未知 final RectF rectF = new RectF(rect); // 拐角的半径 roundPx = roundPx == 0 ? (bitmap.getWidth() + bitmap.getHeight()) / 4 : roundPx; // 消除锯齿 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); // 最终在画布上呈现的就是该圆角矩形图片,然后我们返回该Bitmap对象 return output; }-------------------------------------------------------------------------- /** * 圆形处理 * * @param bitmap * 原图 * @return */ public static Bitmap getRoundBitmap(Bitmap bitmap) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); float roundPx; float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom; if (width <= height) { roundPx = width / 2; left = 0; top = 0; right = width; bottom = width; height = width; dst_left = 0; dst_top = 0; dst_right = width; dst_bottom = width; } else { roundPx = height / 2; float clip = (width - height) / 2; left = clip; right = width - clip; top = 0; bottom = height; width = height; dst_left = 0; dst_top = 0; dst_right = height; dst_bottom = height; } Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888); Canvas canvas = new Canvas(output); final Paint paint = new Paint(); final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom); final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom); final RectF rectF = new RectF(dst); paint.setAntiAlias(true);// 设置画笔无锯齿 canvas.drawARGB(0, 0, 0, 0); // 填充整个Canvas // 以下有两种方法画圆,drawRounRect和drawCircle canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。 // canvas.drawCircle(roundPx, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://www.cnblogs.com/rayray/p/3670120.html canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle return output; } -------------------------------------------------------------------------------0 /** * 缩略图 * * @param bitmap * 原图 * @param thumbnailWidth * 压缩宽 * @param thumbnailHeight * 压缩高 * @return */ public static final Bitmap cropBitmap(final Bitmap bitmap, final int thumbnailWidth, final int thumbnailHeight) { if (bitmap == null) return null; final int width = bitmap.getWidth(); final int height = bitmap.getHeight(); int focusX = width / 2; int focusY = height / 2; int cropX; int cropY; int cropWidth; int cropHeight; float scaleFactor; if (thumbnailWidth * height < thumbnailHeight * width) { // Vertically constrained. cropWidth = thumbnailWidth * height / thumbnailHeight; cropX = Math.max(0, Math.min(focusX - cropWidth / 2, width - cropWidth)); cropY = 0; cropHeight = height; scaleFactor = (float) thumbnailHeight / height; } else { // Horizontally constrained. cropHeight = thumbnailHeight * width / thumbnailWidth; cropY = Math.max(0, Math.min(focusY - cropHeight / 2, height - cropHeight)); cropX = 0; cropWidth = width; scaleFactor = (float) thumbnailWidth / width; } final Bitmap finalBitmap = Bitmap.createBitmap(thumbnailWidth, thumbnailHeight, Bitmap.Config.RGB_565); final Canvas canvas = new Canvas(finalBitmap); final Paint paint = new Paint(); paint.setDither(true); paint.setFilterBitmap(true); canvas.drawColor(0); canvas.drawBitmap(bitmap, new Rect(cropX, cropY, cropX + cropWidth, cropY + cropHeight), new Rect(0, 0, thumbnailWidth, thumbnailHeight), paint); bitmap.recycle(); // Store (long thumbnailId, short focusX, short focusY, JPEG data). final ByteArrayOutputStream cacheOutput = new ByteArrayOutputStream( 16384); final DataOutputStream dataOutput = new DataOutputStream(cacheOutput); // byte[] retVal = null; try { dataOutput.writeShort((int) ((focusX - cropX) * scaleFactor)); dataOutput.writeShort((int) ((focusY - cropY) * scaleFactor)); dataOutput.flush(); finalBitmap.compress(Bitmap.CompressFormat.JPEG, 80, cacheOutput); // retVal = cacheOutput.toByteArray(); cacheOutput.close(); // finalBitmap.recycle(); } catch (Exception e) { ; } return finalBitmap; }
0 0
- android中图片的处理(绘制圆形,圆角||缩略图)
- android 绘制圆形图片
- Android 绘制圆形图片
- Android 绘制圆形图片
- Android绘制圆形图片的方法总结
- Android绘制圆形图片的方法总结
- android绘制圆形、圆角、圆环图片
- 绘制圆形的图片(增强版)
- Android圆形图片和圆角图片的绘制
- Android中绘制圆形和圆角图片
- Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框
- 圆形图片的处理
- Android中绘制圆形头像
- Android绘制圆形图片及点击效果
- android绘制圆形圆角图片
- android 绘制圆形的ImageView
- Android生成圆形缩略图的一种方法
- Android 绘制圆角图片(圆形图片,圆角矩形图片,圆角正方形图片)
- 让支持 VoiceOver 成为一种习惯
- Qt中MVC框架详解
- 关于 zend studio 中有些php 内置函数没有提示,或是有‘小黄色感叹号’
- 安装hue失败
- 在data下创建文件夹
- android中图片的处理(绘制圆形,圆角||缩略图)
- apache上传下载
- 空酒瓶换酒的问题
- 如何将iOS工程中的.plist文件里的内容取出在android的工程中使用
- mysql里面如何用sql语句让字符串转换为数字
- 常用java集合总结
- 基于GIS的定位监控系统开发教程 目录
- android系统相机的使用、及解决拍照闪退的问题
- Eclipse 实战开发常用快捷键,快速提高开发效率