2

背面の「カメラ」を利用してアイテムの画像をキャプチャするアプリケーションがあります。これまでのところ、テストしたすべてのデバイスは、Samsung Galaxy SIII (S3) まで、画像のキャプチャに関して正しく動作しています。

Samsung Galaxy SIII のみで、Camera.onPictureTaken() が、適切なキャプチャ イメージではなくインターレースされたように見える生のイメージを返していることを確認しています。各カメラ パラメータ設定をデバッグし、次のパラメータ セッターが問題を引き起こしていることを確認します。パラメータで明示的に setPictureSize() を設定しない場合、期待どおりに動作します。

parameters.setPictureSize(targetPictureSize);  

デフォルトで parameters.getPictureSize() は [w,h]=[3264, 2448] として返されます

「targetPictureSize」は、以下から返される最も近い一致するサイズに基づいて決定されます。この場合、「targetPictureSize」として [w,h]=[1600, 1200] サイズを使用しました。

camera.getParameters().getSupportedPictureSizes();

原因と回避策わかる人いますか?

4

2 に答える 2

6

この問題camera.setParametersは、プレビューがアクティブなときに、以前に構成されたもの (または既定値) とは異なる pictureSize で呼び出すと発生するようです。解決策は、プレビューを開始または停止する前に画像サイズを設定し、パラメータを設定してからプレビューを再開することです。

parameters.setPictureSize(1600, 1200);
...
camera.stopPreview();
camera.setParameters(parameters);
camera.startPreview();

テクニカルノート:

インターレースの原因は、カメラから返された画像がデフォルトの解像度 (3264x2448) でキャプチャされていることですが、setPictureSize で指定した解像度としてマークされているようです。その結果、そのような画像が表示されている場合、キャプチャされた画像のピクセルのすべての行が (デフォルトの解像度 / 指定された解像度) ピクセルの行として表示されます。画像サイズが 1600x1200 の場合、画像はインターレースされて表示されますが、その他の解像度 (例: 640x480) では画像が完全に破損して表示されます。

于 2013-02-18T19:33:54.273 に答える
0

これには良い答えや理由がないのではないかと思います。Camera.getParameters()。setPictureSize()を適切に実装していないためにSamsungを責めることしかできません。

以下は、setPictureSize()を呼び出さずに、S3モデル名を確認することによる回避策です。

       // Source - http://en.wikipedia.org/wiki/Samsung_Galaxy_S_III
       String s3ModelNames[] = { "XXXXXXXXXXXXXXXX", // Place holder
                "SAMSUNG-SGH-I747", // AT&T
                "SAMSUNG-SGH-T999", // T-Mobile
                "SAMSUNG-SGH-N064", // Japan
                "SAMSUNG-SCH-R530", // US Cellular
                "SAMSUNG-SCH-I535", // Verizon
                "SAMSUNG-SPH-L710", // Sprint
                "SAMSUNG-GT-I9300", // International
                "SGH-I747", // AT&T
                "SGH-T999", // T-Mobile
                "SGH-N064", // Japan
                "SCH-R530", // US Cellular
                "SCH-I535", // Verizon
                "SPH-L710", // Sprint
                "GT-I9300"  // International
       };

       List<String> s3ModelList = Arrays.asList(s3ModelNames);

       if (s3ModelList.contains(deviceModel)) {
          // DEVICE SPECIFIC WORK AROUND for Samsung Galaxy S3
          // SKIP calling parameters.setPictureSize() Samsung Galaxy SIII phone (Confirmed on AT&T, Verizon, Sprint) due the Camera image are interlaced when setPictureSize() are set to other than default.
       }
于 2012-08-28T18:44:54.377 に答える