package com.zhn.tongxunlu;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.net.Uri;
import android.provider.ContactsContract.Data;

/**
 * 图片操作的工具类
 */
public class BitmapUtils {
	
	/**
	 * 通过byte数据进行图片压缩
	 * @param bytes	数据源
	 * @param width	目标图片的宽度
	 * @param height 目标图片的高度
	 * @return
	 */
	public static Bitmap loadBitmap(byte[] bytes,int width,int height){
		//获取原始图片的宽度和高度
		Options opts = new Options();
		//仅仅加载图片的边界属性
		opts.inJustDecodeBounds = true;
		BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);
		int w = opts.outWidth/width;
		int h = opts.outHeight/height;
		int scale = w>h?w:h;
		opts.inSampleSize = scale;
		//不仅仅加载图片的边界属性
		opts.inJustDecodeBounds = false;
		return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);
		
	}
	/**
	 * 向targetFile文件输出bitmap数据
	 * @param bitmap
	 * @param targetFile
	 * @throws FileNotFoundException 
	 */
	public static void save(Bitmap bitmap, File targetFile) throws FileNotFoundException {
		if(!targetFile.getParentFile().exists()){
			targetFile.getParentFile().mkdirs();
		}
		//向文件中输出
		FileOutputStream fos = new FileOutputStream(targetFile);
		//把bitmap压缩，并且按照jpeg格式输出到fos
		bitmap.compress(CompressFormat.JPEG, 100, fos);
	}
	/**
	 * 通过path路径，加载出一个bitmap对象
	 * @param bitmapPath
	 */
	public static Bitmap readBitmap(String bitmapPath) {
		//判断该path路径下是否有图片文件
		File targetFile = new File(bitmapPath);
		//如果没有，返回null
		if(!targetFile.exists()){
			return null;
		}
		//如果有，则返回相应的bitmap
		return BitmapFactory.decodeFile(bitmapPath);
	}
	/**
	 * 通过ContentProvider 取data表中查询联系人头像
	 * @param photoId
	 * @return
	 */
	public static Bitmap loadBitmap(Context context,int photoId) {
		ContentResolver r = context.getContentResolver();
		Uri uri = Data.CONTENT_URI;
		String[] columns = {
				Data.DATA15
		};
		Bitmap bitmap = null;
		Cursor c = r.query(uri, columns, Data._ID+"="+photoId, null, null);
		if(c.moveToFirst()){
			byte[] bytes = c.getBlob(0);
			bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
		}
		c.close();
		return bitmap;
	}
}
