私のアプリは、表面ホルダーを使用してカメラを開きます。カメラがデフォルトのプレビュー サイズで開きます。特定のデバイスでは、デフォルトのプレビュー サイズでは、実際に画面に表示されるよりも多くの画像がキャプチャされます。これを避けるために、プレビューサイズを自分で設定するようになりました。基準は、使用可能なサイズのリストから、画面の幅に最も近いプレビュー サイズを選択することです。
これはほとんどの場合うまく機能します。しかし、選択したプレビュー サイズが気に入らないデバイスに出くわすことがよくあります。
1) Nexus 4 は、選択したプレビュー サイズのいずれかの画像をキャプチャしませんでした。2) Samsung S 4 では、キャプチャした画像に沿って帯状の線 (ノイズ) が発生します。
だから私は標準に反して何かをしているかどうかを理解したかった. ここに私の質問があります:-
1) 表面ホルダーを使用してカメラを開きます。アプリでカメラ ハードウェアを使用できる他の方法はありますか。
2) 使用可能なサイズのリストからプレビュー サイズを選択しています。サイズを選択する前に、具体的に何を探す必要がありますか? サイズを選択するためのロジックを以下に示します:-
private Camera.Size getBestPreviewSize(int width, int height)
{
List<Size> sizes = camera.getParameters().getSupportedPreviewSizes();
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = height;
int targetWidth = width;
int minWidthDiff = 0;
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.width - targetWidth) < minDiff) {
if(size.width > width) {
if (minWidthDiff == 0) {
minWidthDiff = size.width - width;
optimalSize = size;
}
else if (Math.abs(size.width - targetWidth) < minWidthDiff) {
minWidthDiff = size.width - width;
optimalSize = size;
}
minDiff = Math.abs(size.width - targetWidth);
}
}
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
これに関する指示は本当に役に立ちます。
ありがとう !!ガガン