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