Bitmap工具类

一直在使用的一个Bitmap工具类

处理Bitmap和ImageView对象,实现了以下功能:

1.saveBitmap: 把Bitmap对象持久存储到SD卡或手机内存.
2.getViewBitmap: 从view得到bitmap对象
3.addWatermark: Bitmap加水印
4.zoomBitmap: 放大缩小图片
5.getLoacalBitmap: 传入路径,从持久存储(SD卡或手机内存)得到Bitmap对象
6.getBitMapByUrl: 通过URL地址获取Bitmap对象

7.toGrayscale: 对Bitmap进行滤镜特效处理.实现了图片变黑白,变亮,变暗,高对比,低对比,高饱和,低饱和

下载地址:http://download.csdn.net/download/landehuxi/6661713

源码如下:

public class ImgService {
	//亮
	public  final float[] LIGHT_ARR = new float[] { 
			1, 0, 0, 0, 100, 
			0, 1, 0, 0, 100, 
			0, 0, 1, 0, 100,
			0, 0, 0, 1, 0 };
	//暗
	public  final float[] DARK_ARR = new float[] { 
			0.2f, 0, 0, 0, 50.8f, 
			0, 0.2f, 0, 0, 50.8f, 
			0, 0,0.2f, 0, 50.8f, 
			0, 0, 0, 1f, 0 };
	//高对比
	public  final float[] GDB_ARR = new float[] { 
				5, 0, 0, 0, -250, 
				0, 5, 0, 0, -250, 
				0, 0, 5, 0, -250,
				0, 0, 0, 1, 0 };
	//高对比
	public  final float[] DDB_ARR = new float[] { 
				0.2f, 0, 0, 0, 50, 
				0, 0.2f, 0, 0, 50, 
				0, 0, 0.2f, 0, 50,
				0, 0, 0, 1, 0 };
	//高饱和
	public  final float[] GBH_ARR = new float[] { 
				3f, -1.8f, -0.25f, 0, 50, 
				-0.9f, 2.1f, -0.25f, 0, 50, 
				-0.9f, -1.8f, 3.8f, 0, 50,
				0, 0, 0, 1, 0 };
	//低饱和
	public final float[] DBH_ARR = new float[] { 
			0.3f, 0.6f, 0.08f, 0, 0, 
			0.3f, 0.6f, 0.08f, 0, 0, 
			0.3f, 0.6f, 0.08f, 0, 0,
			0, 0, 0, 1, 0 };
	//COPY
	public final float[] COPY_ARR = new float[] { 
				0, 0, 0, 0, 0, 
				0, 0, 0, 0, 0, 
				0, 0, 0, 0, 0,
				0, 0, 0, 0, 0 };
	/**
	 * 为图片加滤镜特效.array参数为ImgService定义的几个滤镜矩阵.如ImgService.LIGHT_ARR
	 * @param bmpOriginal
	 * @param array
	 * @return
	 */
	public Bitmap toGrayscale(Bitmap bmpOriginal, float[] array) {
		int width, height;
		height = bmpOriginal.getHeight();
		width = bmpOriginal.getWidth();

		Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
				Bitmap.Config.RGB_565);
		Canvas c = new Canvas(bmpGrayscale);
		Paint paint = new Paint();
		ColorMatrix colorMatrix = new ColorMatrix();
		colorMatrix.set(array);
		paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
		c.drawBitmap(bmpOriginal, 0, 0, paint);
		bmpOriginal.recycle();
		bmpOriginal=null;
		return bmpGrayscale;
	}

	public boolean saveBitmap(Bitmap bitmap, String fileName, String path) {
		File file = new File(path);
		FileOutputStream fos=null;
		if (!file.exists()) {
			file.mkdir();
		}
		File imageFile = new File(file, fileName);
		try {
			imageFile.createNewFile();
			fos = new FileOutputStream(imageFile);
			bitmap.compress(CompressFormat.JPEG, 50, fos);
			fos.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fos!=null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				fos=null;
			}
		}
		return true;
	}

	// 从view得到bitmap
	public Bitmap getViewBitmap(View view) {
		Bitmap bitmap = null;
		try {
			int width = view.getWidth();
			int height = view.getHeight();
			if (width != 0 && height != 0) {
				bitmap = Bitmap.createBitmap(width, height,
						Bitmap.Config.ARGB_8888);
				Canvas canvas = new Canvas(bitmap);
				view.draw(canvas);
			}
		} catch (Exception e) {
			bitmap = null;
			Debug.out(e);
		}
		return bitmap;
	}

	// Bitmap加水印
	public Bitmap addWatermark(Bitmap src, Bitmap watermark) {
		if (src == null || watermark == null) {
			return src;
		}

		int sWid = src.getWidth();
		int sHei = src.getHeight();
		int wWid = watermark.getWidth();
		int wHei = watermark.getHeight();
		if (sWid == 0 || sHei == 0) {
			return null;
		}

		if (sWid < wWid || sHei < wHei) {
			return src;
		}

		Bitmap bitmap = Bitmap.createBitmap(sWid, sHei, Config.ARGB_8888);//Config可修改,改变内存占用
		try {
			Canvas cv = new Canvas(bitmap);
			cv.drawBitmap(src, 0, 0, null);
			cv.drawBitmap(watermark, sWid - wWid - 5, sHei - wHei - 5, null);
			cv.save(Canvas.ALL_SAVE_FLAG);
			cv.restore();
		} catch (Exception e) {
			bitmap = null;
			e.getStackTrace();
		}finally{
			src.recycle();
			src=null;
			watermark.recycle();
			watermark=null;
		}
		return bitmap;
	}
	/**
	 * 放大缩小图片
	 * 
	 * @Title: zoomBitmap
	 * @param @param bitmap
	 * @param @param w
	 * @param @param h
	 * @return Bitmap
	 * @throws
	 */
	public  Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
		int width = bitmap.getWidth();
		int height = bitmap.getHeight();
		Matrix matrix = new Matrix();
		float scaleWidht = ((float) w / width);
		float scaleHeight = ((float) h / height);
		matrix.postScale(scaleWidht, scaleHeight);
		Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
		bitmap.recycle();
		bitmap=null;
		return newbmp;
	}
	/**
	 * @Title: getLoacalBitmap
	 * @Description: 加载本地图片
	 * @param @param url 本地路径
	 * @param @return
	 * @return Bitmap
	 * @throws
	 */
	public  Bitmap getLoacalBitmap(String url) {
		if (url != null) {
			FileInputStream fis=null;
			try {
				fis = new FileInputStream(url);
				return BitmapFactory.decodeStream(fis); // /把流转化为Bitmap图片
			} catch (FileNotFoundException e) {
				e.printStackTrace();
				return null;
			}finally{
				StreamService.close(fis);
				if(fis!=null){
					try {
						fis.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
					fis=null;
				}
			}
		} else {
			return null;
		}
	}

	/**
	 * 通过URL地址获取Bitmap对象
	 * 
	 * @Title: getBitMapByUrl
	 * @param @param url
	 * @param @return
	 * @param @throws Exception
	 * @return Bitmap
	 * @throws
	 */
	public  Bitmap getBitMapByUrl(final String url) {
		URL fileUrl = null;
		InputStream is=null;
		Bitmap bitmap = null;
		try {
			fileUrl = new URL(url);
			HttpURLConnection conn = (HttpURLConnection) fileUrl.openConnection();
			conn.setDoInput(true);
			conn.connect();
			is = conn.getInputStream();
			bitmap = BitmapFactory.decodeStream(is);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if (null!=is) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			is=null;
		}
		return bitmap;
	}
	
}

你可能感兴趣的:(Android,安卓)