13

出于某种原因,我的相机应用程序保存了所有旋转 90 度的照片(照片仅在使用相机在横向模式下拍摄时看起来正确)我相信 onPictureTaken 应该自动旋转照片但我读到三星设备存在问题(我无法在另一个品牌上测试它,所以我不知道是不是这样)。这是我的代码:

   public void onPictureTaken(byte[] data, Camera camera) {
      // Generate file name
      FileOutputStream outStream = null;
      outStream = new FileOutputStream(filePath);
      outStream.write(data);
      outStream.close();

我在想它可以通过检查方向和旋转字节数组来解决,但必须有一种更直接的方法来做到这一点,因为处理字节数组很痛苦。如何确保保存的照片与拍摄方向一致?

4

2 回答 2

0

有不同的方式来获取你的图像,作为数据,作为流,作为文件,对于相机和画廊和其他应用程序来说也是不同的。对于它们中的每一个,您都有另一种访问方向标签的方法。确定方向后,您可以旋转图像。

你 - 或者每个人 - 真的应该得到一个 Nexus,它们很好,可以为你旋转图像并将方向设置为 0,而像三星这样的懒惰的人只是存储图像并设置方向标签。;)

于 2014-09-19T00:31:59.697 回答
0

尝试这样的事情:

int orientation = Exif.getOrientation(data);
Log.d("#", "onPictureTaken().orientation = " + orientation);
if(orientation != 0) {
     Bitmap bmpSrc = BitmapFactory.decodeByteArray(data, 0, data.length);
     Bitmap bmpRotated = CameraUtil.rotate(bmpSrc, orientation);
     bmpSrc.recycle();


       try {

             FileOutputStream localFileOutputStream = new FileOutputStream(filePath);
             bmpRotated.compress(Bitmap.CompressFormat.JPEG, 90,localFileOutputStream);
             localFileOutputStream.flush();
             localFileOutputStream.close();
             bmpRotated.recycle();

           }
        catch (FileNotFoundException e) 
           {
              e.printStackTrace();
           }
        catch (IOException e) 
           {
               e.printStackTrace();
           }

      } else {

          try {

               FileOutputStream localFileOutputStream = new FileOutputStream(filePath);
               localFileOutputStream.write(data);
               localFileOutputStream.flush();
               localFileOutputStream.close();

               } catch (IOException localIOException)
                  {
                                        Log.e("#",localIOException.getMessage());
                  }
   }
于 2013-01-30T11:44:19.327 回答