AndroidカスタムカメラCameraの黒スクリーンの解決方法


本論文の例は、AndroidのカスタムカメラCameraがブラックスクリーンを出現させる解決方法を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
いくつかの携帯電話については、HTCのように、カスタマイズCameraを呼び出すと、Camera.Parametersのparameters.set PreviewSize(width,height)方法が起動され、widthとheightが奇数の場合、暗い画面が現れ、解決方法はSDKが提供するApidemosでCameraにオフする例を参照することができる。

List<Size> sizes = parameters.getSupportedPreviewSizes();
Size optimalSize = getOptimalPreviewSize(sizes, w, h);
parameters.setPreviewSize(optimalSize.width, optimalSize.height);

また、HTCの携帯電話では、parameters.set PictureSize(width,height)属性を設定すると、ブラックスクリーンにつながりますが、サムスンの携帯電話では問題ありません。また、set Preview Size属性の幅を高く設定すると、撮った写真にも歪みなどのBugがありますので、適合問題がある場合は、PreviewSizeとPicture Size属性を設定しないことが一番いいです。
get Optimal Preview Size方法

private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
 final double ASPECT_TOLERANCE = 0.05;
 double targetRatio = (double) w / h;
 if (sizes == null)
 return null;
 Size optimalSize = null;
 double minDiff = Double.MAX_VALUE;
 int targetHeight = h;
 // Try to find an size match aspect ratio and size
 for (Size size : sizes) {
 double ratio = (double) size.width / size.height;
 if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
 continue;
 if (Math.abs(size.height - targetHeight) < minDiff) {
 optimalSize = size;
 minDiff = Math.abs(size.height - targetHeight);
 }
 }
 // Cannot find the one match the aspect ratio, ignore the requirement
 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;
}

Android関連の内容についてもっと興味がある読者は、当駅のテーマを調べてもいいです。「Android写真と画像処理技術のまとめ」、「Android開発入門と上級教程」、「Androidマルチメディア操作技術まとめ(オーディオ、ビデオ、録音など)」、「Android基本コンポーネントの使い方のまとめ」、「AndroidビューViewテクニックのまとめ」、「Androidレイアウトlayout技巧まとめ」および「Androidコントロールの使い方のまとめ
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。