質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Java

    14396questions

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

  • Android

    6720questions

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

カメラアプリ priori3で撮ったjpeg画像について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 324

yoshio197

score 26

androidのカメラアプリを作成しています。
プレビュー画面をそのままデータとして取得して、それをbmpに変換しさらにjpegに変換しています。

mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();


これで最適な画面サイズを取得しているのですが、freetelのpriori3だと作成されたjpegが以下のようになります。
イメージ説明
どうすれば正しいjpgファイルになるでしょうか?
ちなみに以下だと正しいjpegファイルが取得できます。

p.setPreviewSize(640, 480);

変換コードを記載します。

    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;
    }

あと保存するコードです。

               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画像が取得できます。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

mSupportedPreviewSizesはどのような値が入っていますか?

機種依存の問題はプログラマ側で根本的なもの解決をすることは難しいです。
不正な値の場合はデフォルト値でプログラムを実行するような対処しかできないと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/02 12:34

    priori3のmSupportedPreviewSizes は (768,480)です。
    なるほど、機種依存の問題なんですね。ありがとうございます。

    キャンセル

  • 2017/02/02 12:37

    ひとつ考えたのですがNDKを使用するとどうなるか試してみたいと思います。

    キャンセル

  • 2017/02/02 12:38

    ちゃんと値は帰って来ていますね。他にも原因がありそうですが、他の端末ではできているということは機種依存の可能性は高いです。
    サポートサイズと実際のサイズがずれていそうですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14396questions

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

  • Android

    6720questions

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