1. 程式人生 > >Android照相機模組程式設計 照片顛倒問題及查詢攝像頭引數問題的解決

Android照相機模組程式設計 照片顛倒問題及查詢攝像頭引數問題的解決

               

      這兩天程式設計弄Android照相機模組,設定好各種引數後,發現預覽的時候,照片是顛倒了,不是上下顛倒而是顛倒90°。 我的手機是華為U9200,用的Android4.0.3,後來看到http://www.cnblogs.com/skyseraph/archive/2012/03/26/2418665.html這篇文章,增加程式碼:myCamera.setDisplayOrientation(90); 然後預覽就正常了。但是拍攝的照片在電腦上開啟一看,仍然是傾斜的。傾斜了90°,後來加上這句:myParameters.set("rotation", 90); 這個是讓照片旋轉90°一切正常了! 之前設了很多//myParameters.set("orientation", "portrait");或//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);發現都沒有作用。就差上面那兩句話! 

      如何檢視自己的攝像頭支援的PreviewSize和 PictureSize呢?這裡簡單說下,PreviewSize是預覽的大小,也就是拍照前看到的圖片大小,你可以試一下,這個引數設定不同,在同樣焦距下,你拍攝桌子上一個固定距離的一個東西,看到的視野會不同。PictureSize是指最終拍攝到的圖片的大小,也就是圖片的質量。怎麼檢視呢?

   首先在主程式的開始private static final String TAG = "MyAndroid";

然後:List<Size> pictureSizes ;       List<Size> previewSizes;

        for (int i = 0; i < pictureSizes.size(); i++){  psize = pictureSizes.get(i);Log.i(TAG +"initCamera", "PictrueSize,width: " + psize.width + " height" + psize.height);}for (int i = 0; i < previewSizes.size(); i++){  psize = previewSizes.get(i);Log.i(TAG +"initCamera", "previewSize,width: " + psize.width + " height" + psize.height);}

就可以查看了!

  我的PictureSize的引數分別是:

  

預覽的引數是:

但我想得到最終是寬度為600,高度為800的圖片。怎麼半呢?  這裡要說明下,由於前面的myParameters.set("rotation", 90); 你如果設定照相機PictureSize的引數是M*N,得到的圖片大小是N*M,因為你旋轉了。怎麼才能得到我想要的指定大小的圖片呢,

FileOutputStream fout = new FileOutputStream(fTest);BufferedOutputStream bos = new BufferedOutputStream(fout);Bitmap mBitmap = Bitmap.createScaledBitmap(bm, 600, 800, true);mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);

//bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);

加上紅色部分的程式碼就可以了。bm是最初的照片資料,是個Bitmap。 如果您想得到原始大小,就把紅色去掉,把最後一句加上來就可以了。