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的圖片大小