android Bitmap图片的相关处理操作
android Bitmap图片的相关处理操作
/** * 从网络获取图片并返回 Bitmap 对象 * @param urlpath 网络URL * @return */ public static Bitmap getImageFromUrl(String urlpath){ InputStream inputStream = null; Bitmap bitmap = null; try { URL url = new URL(urlpath); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); //设置请求方法为GET conn.setReadTimeout(5*1000); //设置请求过时时间为5秒 inputStream = conn.getInputStream(); //通过输入流获得图片数据 byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); byte[] data = bos.toByteArray();//获得图片的二进制数据 bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); //生成位图 } catch (IOException e) { e.printStackTrace(); } finally{ if(inputStream != null){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return bitmap; } /** * 按正方形裁切图片 */ public static Bitmap ImageCrop(Bitmap bitmap) { int w = bitmap.getWidth(); // 得到图片的宽,高 int h = bitmap.getHeight(); int wh = w > h ? h : w;// 裁切后所取的正方形区域边长 int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标 int retY = w > h ? 0 : (h - w) / 2; //下面这句是关键 return Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false); } //使用Bitmap加Matrix来缩放 public static Bitmap resizeImage(Bitmap bitmap, int w, int h) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); int newWidth = w; int newHeight = h; float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); if(!bitmap.isRecycled()){ bitmap.recycle(); bitmap = null; } return resizedBitmap; } //使用Bitmap加Matrix来缩放 [path 图片路径] public static Bitmap resizeImage(String path, int w, int h) { //Bitmap bitmap = resizeImage(path); //Bitmap bitmap = BitmapFactory.decodeFile(path); Bitmap bitmap = decodeFile(path,w,h); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int newWidth = w; int newHeight = h; float initScale=(float)0.99; float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; if(scaleWidth<1.0||scaleHeight<1.0){ initScale = scaleHeight > scaleWidth ? scaleWidth : scaleHeight; } else{ return bitmap; } Matrix matrix = new Matrix(); matrix.postScale(initScale, initScale); Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,height, matrix, true); if(!bitmap.isRecycled()){ bitmap.recycle(); bitmap = null; } return resizedBitmap; }
/* *图片圆角的设置 *bitmap 传入的bitmap 对象 *pixels 自定义圆角 角度 */ public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(outputBitmap); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = pixels; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return outputBitmap; }