非常に単純なカメラ アプリケーションのカメラ フィードを表示するために、SurfaceView を拡張しました。各デバイスに最適なプレビュー サイズを見つけるために、私が見たほぼすべてのオープン ソース カメラ アプリで使用されている次のサンプル コードを使用しました。
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
double minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.width - width) < minDiff) {
screenWidth = size.width;
screenHeight = size.height;
minDiff = Math.abs(size.width - width);
}
}
この時点まで、すべてが完全に機能します。
ここで、アプリケーションの性質上、セッション中に 2 つのビットマップをメモリに保持する必要があり、簡単にするために (テスト中のメモリの問題を回避するため)、PICTURE SIZE に同じコードを使用しました ( getSupportedPreviewSizes() と getSupportedPictureSizes())。ほとんどのデバイスですべてがうまく機能しますが、各デバイスに最適な画像サイズを選択するには、別の方法を決定する必要があります。
最近、Nexus 4 デバイスでのテスト中に、上記のループが最適な画像サイズの選択に失敗しました。調査の結果、getSupportedPictureSizes() 関数が、Nexus 4 カメラで実際にサポートされていない値、つまり 1280*960 を返すことがわかりました。では、この問題をどのように解決しますか? つまり、この関数は、デバイスのカメラがサポートする値のみを返すことになっていませんか? テストできない同じ問題を抱えた他のデバイスがあると確信しています。この問題をどのように解決すべきかについての手がかりはありますか?
更新:エラーなしで間違ったパラメーターを受け入れ、返される画像が歪んでいるということです。ここでも画像を取得しようとします。また、ランタイム例外はありません。