問題分析:隨著用戶對于拍照清晰度的需求罐韩,android手機對于攝像頭也是一升再升亿絮,這就導(dǎo)致了作為android開發(fā)工程師對于兼容性維護的繼續(xù)跟進以及問題處理袜刷。
針對于自定義相機拍照模糊的問題父丰,經(jīng)過幾天的調(diào)試甥厦,并且發(fā)現(xiàn)問題的根源就在于相機的拍照尺寸設(shè)置兼容上面粪薛。
關(guān)鍵點在于下面這兩行代碼
直觀的來講第一個是對于預(yù)覽清晰度的設(shè)置悴了,第二就是對于拍出來的照片的設(shè)置。
parameters.setPreviewSize(xx.width, xx.height);
parameters.setPictureSize(xx.width, xxheight);
隨著相機硬件的不斷升級违寿,從最早的240*480 逐漸到現(xiàn)在 4800*5600等等的高像素攝像頭的出現(xiàn)湃交,在低版本手機設(shè)置本身的分辨率沒有問題,但是在高分辨率手機上設(shè)置第分辨率顯然是不合適的藤巢,這也就是導(dǎo)致問題的所在搞莺,因為安卓手機的參差不齊,所以我做了如下的處理來兼容大部分手機菌瘪,思路如下腮敌。
看如下代碼:
Camera.Parameters parameters =mCamera.getParameters();
parameters.getSupportedPreviewSizes()
parameters.getSupportedPictureSizes()
通過以上代碼可以獲取到相機所兼容的分辨率,對于不是專門做相機的應(yīng)用俏扩,我們可以折中設(shè)置一下糜工,去中間的屬性作為你拍照的分辨率,取最大分辨率作為預(yù)覽的屬性录淡,代碼如下
if(parameters.getSupportedPreviewSizes()!=null&?meters.getSupportedPreviewSizes().size()>0){
parameters.setPreviewSize(parameters.getSupportedPreviewSizes().get(0).width, parameters.getSupportedPreviewSizes().get(0).height);
}
if(parameters.getSupportedPictureSizes()!=null&?meters.getSupportedPictureSizes().size()>0){
parameters.setPictureSize(parameters.getSupportedPictureSizes().get(parameters.getSupportedPictureSizes().size()/2).width, parameters.getSupportedPictureSizes().get(parameters.getSupportedPictureSizes().size()/2).height);
}
通過打印獲取的數(shù)據(jù)捌木,分辨率的大小是從大到小返回的,如果設(shè)置最大的嫉戚,拍照并且預(yù)覽會有所卡段延遲刨裆,如果是專門做相機的這個得持續(xù)優(yōu)化,對于一般應(yīng)用來說取折中就夠用了彬檀。
接下來
parameters.setPictureFormat(ImageFormat.JPEG);
? ? ? ? ? ? ? ? mCamera.setParameters(parameters);
//把這個預(yù)覽效果展示在SurfaceView上面
? ? ? ? ? ? ? ? mCamera.setPreviewDisplay(mHolder);
//開啟預(yù)覽效果
? ? mCamera.startPreview();//啟動瀏覽
這樣就完成了 對大部分手機的兼容帆啃,親測28種不同手機都沒有問題。