Android自定義照相機Camera出現黑屏的解決方法

NO IMAGE

本文例項講述了Android自定義照相機Camera出現黑屏的解決方法。分享給大家供大家參考,具體如下:

對於一些手機,像HTC,當自定義Camera時,呼叫Camera.Parameters的 parameters.setPreviewSize(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.setPictureSize(width,height)屬性,也會導致黑屏,而在三星手機上則沒有問題。還有如果設定setPreviewSize屬性的寬高錯誤的話,拍出的照片也會存在失真等Bug,所以遇到適配問題時,最好的辦法就是不設定PreviewSize和PictureSize屬性

getOptimalPreviewSize方法


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程式設計有所幫助。

您可能感興趣的文章:

Android實現Camera2預覽和拍照效果android自定義Camera拍照並檢視圖片Android Camera實現毫秒級拍照例項Android中使用Camera類編寫手機拍照App的例項教程android系統在靜音模式下關閉camera拍照聲音的方法android之camera用法例項詳解Android程式設計中呼叫Camera時預覽畫面有旋轉問題的解決方法Android camera實時預覽 實時處理,人臉識別示例Android變形(Transform)之Camera使用介紹Android自定義Camera實現拍照功能