2013年1月12日 星期六

Android拍照、存檔、縮放尺寸與壓縮


要使用拍照功能必須啟用的應用程式許可權
    
    
要存取檔必須啟用的應用程式許可權
    
public class CaptureImageActivity extends Activity {

 private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
 private Uri uri;

 // 建立
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  final Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

  // 資料夾不存在就建立
  File imagesFolder = new File(Environment.getExternalStorageDirectory(),
    "MyImages");
  imagesFolder.mkdirs();

  // 設定照片路徑與檔名
  File image = new File(imagesFolder, "image_001.jpg");
  uri = Uri.fromFile(image);
  imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

  startActivityForResult(imageIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
   switch (resultCode) {
   case RESULT_CANCELED:
    break;

   case RESULT_OK:
    setupImage(uri, 320, 240, 100);
    break;
   }
  }
 }
 
 /**
 * 維持長寬比例縮放Bitmap
 *
 * @param bitmap
 * @param maxWidth
 * @param maxHeight
 * @return
 */
    public Bitmap resizeBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {
        int originWidth  = bitmap.getWidth();
        int originHeight = bitmap.getHeight();

        if (originWidth < maxWidth && originHeight < maxHeight) {
            return bitmap;
        }

        int width  = originWidth;
        int height = originHeight;

        if (originWidth > maxWidth) {
            width = maxWidth;

            double i = originWidth * 1.0 / maxWidth;
            height = (int) Math.floor(originHeight / i);

            bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
        }

        if (height > maxHeight) {
            height = maxHeight;
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
        }

        return bitmap;
    }

 /**
 * 載入影像檔並縮放縮影像檔大小與壓縮影像品質
 *
 * @param uri
 * @param maxWidth
 * @param maxHeight
 * @return
 */
 public Bitmap setupImage(Uri uri, int maxWidth, int maxHeight, int compress) {
  Bitmap tempBitmap = null;
  Bitmap bm = null;
  
  try {
   tempBitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
   
   // 縮族圖片
   bm = resizeBitmap(tempBitmap, maxWidth, maxHeight);

   Log.v("setupImage", "影像檔載入與縮放成功");

   FileOutputStream out = new FileOutputStream(uri.getPath());
   bm.compress(Bitmap.CompressFormat.JPEG, compress, out);
   out.close();
  } catch (Exception e) {
   Log.e("setupImage", "無法縮放或壓縮影像檔", e);
  }

  return bm;
 }
}

沒有留言:

張貼留言