Android 通過比例剪切圖片

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

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.view.View;

public class CutPhotoCustomView extends View {
	
	int cavas_width = 640;//畫布大小
	int cavas_height = 480;
	
	int cut_width;
	int cut_height;
	
	Matrix cut_matrix = new Matrix();
	
	int startx = 0;//剪切的起始點
	int starty = 0;

	Canvas cutCanvas = null;
	Bitmap cacheBitmap = null;
	Bitmap resultBitmap = null;//要保存的指定大小的Bitmap
	public CutPhotoCustomView(Context context) {
		super(context);
		cacheBitmap = Bitmap.createBitmap(cavas_width, cavas_height, Config.ARGB_8888);
		cutCanvas = new Canvas();
		cutCanvas.setBitmap(cacheBitmap);
	}

	
	@Override
	protected void onDraw(Canvas canvas) {
		canvas.drawBitmap(cacheBitmap, 0,0, null);
	}
	
	
	// save 640*480 jpeg  將圖片按比例剪切成640*480像素問題
	private void cut640_480Photo(String file_name){
		cutCanvas.drawBitmap(resultBitmap, 0,0,null);
		String foldPath = "/mnt/sdcard/DCIM/Camera/";
		File foldFile = new File(foldPath);
		if(!foldFile.exists()){
			foldFile.mkdirs();
		}
		String fileName=foldPath+file_name+".jpg";
		FileOutputStream out;
		try {
			File saveFile = new File(fileName);
			if(saveFile.exists()){
				saveFile.delete();
			}
			out = new FileOutputStream(new File(fileName));
			cacheBitmap.compress(CompressFormat.JPEG, 85, out);//保存文件
			out.close();
			//StaticData.inMap(file_name, fileName);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	
	//set backgroud img
	public Bitmap setCanvasBackgroud(Bitmap bitmap,String file_name){
		if(bitmap.getWidth() > bitmap.getHeight()){//當width>height的時候,設置縮放比例
			cut_width = (bitmap.getHeight()*4) / 3;
			cut_height = bitmap.getHeight();
			float xb = ((float) cavas_width) / cut_width;
			float yb = ((float) cavas_height) / cut_height;
			cut_matrix.postScale(xb,yb);
			startx = (bitmap.getWidth() - cut_width)/2;
			resultBitmap = Bitmap.createBitmap(bitmap,startx,starty,cut_width,cut_height,cut_matrix,true);
		}else if(bitmap.getWidth() < bitmap.getHeight()){//當width < height的時候,設置縮放比例
			cut_width = bitmap.getWidth();
			cut_height =  (bitmap.getWidth()*3)/4;
			float xb = ((float) cavas_width) / cut_width;
			float yb = ((float) cavas_height) / cut_height;
			cut_matrix.postScale(xb,yb);
			starty = (bitmap.getHeight() - cut_height)/2;
			resultBitmap = Bitmap.createBitmap(bitmap,0,starty,cut_width,cut_height,cut_matrix,true);
		}
		//把文件保存起來
		cut640_480Photo(file_name);
		return resultBitmap;
	}
	
}
	


上面的寫法是先根據比例把圖片縮小,我這裏是按4比3(長寬比)來縮放的!然後再從畫布的一個起始點(startx,starty)截取長為640,寬為480的圖片大小


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章