日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决SurfaceView预览Camera拉伸问题

發布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决SurfaceView预览Camera拉伸问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在android中實現錄制視頻時,都會要求實現一個視頻預覽的功能(一般都是全屏預覽),實現方式就是用SurfaceView來實時顯示Camera傳遞過來的圖像。

但是我們都知道,android手機的屏幕尺寸千奇百怪,使用默認的預覽尺寸,部分手機會導致SurfaceView顯示時圖像拉長,整個人的臉看起來比驢臉還長;如果設置Camera的預覽尺寸為屏幕尺寸,那么如果剛好Camera不兼容這個尺寸,則會直接報錯。

那就沒辦法了么?

怎么能難倒萬能的android開發者,如果屏幕尺寸與預覽尺寸不一致,那么只要他們的寬高比一致,顯示出來的效果一樣是正常的。所以,重點是如何找到最相近的預覽尺寸參數,代碼如下:

/*** 通過對比得到與寬高比最接近的預覽尺寸(如果有相同尺寸,優先選擇)** @param isPortrait 是否豎屏* @param surfaceWidth 需要被進行對比的原寬* @param surfaceHeight 需要被進行對比的原高* @param preSizeList 需要對比的預覽尺寸列表* @return 得到與原寬高比例最接近的尺寸*/ public static Camera.Size getCloselyPreSize(boolean isPortrait, int surfaceWidth, int surfaceHeight, List<Camera.Size> preSizeList) {int reqTmpWidth;int reqTmpHeight;// 當屏幕為垂直的時候需要把寬高值進行調換,保證寬大于高if (isPortrait) {reqTmpWidth = surfaceHeight;reqTmpHeight = surfaceWidth;} else {reqTmpWidth = surfaceWidth;reqTmpHeight = surfaceHeight;}//先查找preview中是否存在與surfaceview相同寬高的尺寸for(Camera.Size size : preSizeList){if((size.width == reqTmpWidth) && (size.height == reqTmpHeight)){return size;}}// 得到與傳入的寬高比最接近的sizefloat reqRatio = ((float) reqTmpWidth) / reqTmpHeight;float curRatio, deltaRatio;float deltaRatioMin = Float.MAX_VALUE;Camera.Size retSize = null;for (Camera.Size size : preSizeList) {curRatio = ((float) size.width) / size.height;deltaRatio = Math.abs(reqRatio - curRatio);if (deltaRatio < deltaRatioMin) {deltaRatioMin = deltaRatio;retSize = size;}}return retSize; }然后在初始化Camera的時候設置預覽尺寸的參數:

Camera.Parameters parameters = mCamera.getParameters(); Camera.Size preSize = CameraUtil.getCloselyPreSize(true, screenWidth, screenHeight, parameters.getSupportedPreviewSizes()); parameters.setPreviewSize(preSize.width, preSize.height); mCamera.setParameters(parameters);因為我這里SurfaceView是全屏顯示,所以,屏幕的寬高就是SurfaceView的寬高。


參考:

Android Camera多屏幕適配解決預覽照片拉伸

總結

以上是生活随笔為你收集整理的解决SurfaceView预览Camera拉伸问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。