質問編集履歴

1 補足の追加

yoshio197

yoshio197 score 36

2017/02/02 11:37  投稿

カメラアプリ priori3で撮ったjpeg画像について
androidのカメラアプリを作成しています。
プレビュー画面をそのままデータとして取得して、それをbmpに変換しさらにjpegに変換しています。
```java
mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
```
これで最適な画面サイズを取得しているのですが、freetelのpriori3だと作成されたjpegが以下のようになります。
![イメージ説明](30f4745d0ffdfafd2ce41acab666431b.jpeg)
どうすれば正しいjpgファイルになるでしょうか?
ちなみに以下だと正しいjpegファイルが取得できます。
```java
p.setPreviewSize(640, 480);
```
変換コードを記載します。
```java
   public static Bitmap getBitmapImageFromYUV(byte[] data, int width, int height, Camera camera) {
       Bitmap bmp = null;
       FileOutputStream outStream = null;
       byte[] byt;
       YuvImage yuv_image = null;
       int format = camera.getParameters().getPreviewFormat();
       if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) {
           // Get the YuV image
           yuv_image = new YuvImage(data, format, width, height, null);
           // Convert YuV to Jpeg
           Rect rect = new Rect(0, 0, width, height);
           ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
           yuv_image.compressToJpeg(rect, 100, output_stream);
           byt = output_stream.toByteArray();
           BitmapFactory.Options bitmapFatoryOptions = new BitmapFactory.Options();
           bitmapFatoryOptions.inPreferredConfig = Bitmap.Config.RGB_565;
           bmp = BitmapFactory.decodeByteArray(byt, 0, byt.length, bitmapFatoryOptions);
       }
       return bmp;
   }
```
あと保存するコードです。
```java
              FileOutputStream out = null;
               // ファイル保存
               try {
                   out = new FileOutputStream(imgPath);
                   rotated_bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
                   out.flush();
                   out.close();
```
ちなみに変換するのはAsyncTaskのdoInBackgroundで行っています。
回答よろしくお願い致します。
回答よろしくお願い致します。
(補足です。他のスマホaquosやgalaxyではgetSupportedPreviewSizes()のプレビューサイズで正しくjpeg画像が取得できます。)
  • Java

    23461 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    9990 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る