2013/07/02

Android Camera 將照片做翻轉

翻轉可以再剛開始設定Camera參數用Parameters的setRotation翻轉或set方法去設定
目前我在開發的是15的版本是可以用的

Parameters parameters = camera.getParameters();
parameters.setRotation(90);
parameters.set("rotation", 90);

那如果希望在拍照完成時處理則可以寫在PictureCallback的onPictureTaken方法內,利用Matrix來做翻轉
只是在onPictureTaken有可能會造成OutOfMemoryError
private PictureCallback pictureCallBack = new PictureCallback() {
  @Override
  public void onPictureTaken(byte[] data, Camera camera) {
   try {

    // 進行解碼
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

    // 矩陣
    Matrix matrix = new Matrix();
    float angle = 90;
    
    // 翻轉角度
    matrix.postRotate(angle);
    Bitmap rotaBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    bitmap = null;

    // 設定檔案存放位置
    File file = new File(new Date().getTime() + ".jpg");
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    rotaBitmap.compress(CompressFormat.JPEG, 85, fileOutputStream);

    // 寫入檔案
    fileOutputStream.flush();
    fileOutputStream.close();

    // 重新開啟預覽
    camera.startPreview();
   } catch (FileNotFoundException e) {
   } catch (IOException e) {
   }
 }
};