13

何らかの理由で、私のカメラ アプリはすべての写真を 90 度回転して保存します (写真はカメラを横向きモードで撮影した場合にのみ正しく表示されます)別のブランドでテストするため、そうであるかどうかはわかりません)。これは私のコードです:

   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 に設定しますが、Samsung のような怠惰な人は、画像を保存して向きタグを設定するだけです。;)

于 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 に答える