Android 通過比例剪切圖片

来源:互联网 发布:linux脚本编程 编辑:程序博客网 时间:2024/05/01 03:18
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;//要保存的指定大小的Bitmappublic CutPhotoCustomView(Context context) {super(context);cacheBitmap = Bitmap.createBitmap(cavas_width, cavas_height, Config.ARGB_8888);cutCanvas = new Canvas();cutCanvas.setBitmap(cacheBitmap);}@Overrideprotected 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 imgpublic 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的圖片大小


原创粉丝点击