Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中級第五講--獲得並設置相機分辨率以及鏡頭圖片倒轉問題

Android中級第五講--獲得並設置相機分辨率以及鏡頭圖片倒轉問題

編輯:關於Android編程

今天我們講一下如何獲得並設置相機分辨率的問題,算是技術貼,也算知識掃盲貼。   有很多網友會問,為什麼我的相機設置分辨率沒效果啊?         首先,做相機程序,必須要硬件支持!如開啟聲音、分辨率設置、對焦等功能。   如果說不支持就得到不到想到的效果,如很多相機程序可以設置分辨率,但感覺不成功,500w的相機,愣是只有300w的效果。         這裡主要講如何利用surfaceView來開發相機,並設置分辨率參數,以此來設置圖片的大小,此方法應在surfaceChanged或者surfaceCreated方法裡執行,   如選surfaceCreated,那配置要另寫一個頁面,這樣camera會被destroy掉,然後回來再被created,當然這個方法比較簡單;   如選surfaceChanged,配置寫在本頁面即可,但實現起來有些難度。   代碼如下:     [html]   // 獲得相機參數               Camera.Parameters parameters = camera.getParameters();               if (TextUtils.isEmpty(g3_setting.getString(AppData.G3_CAMERA_SIZE,                       ""))) {                   // 獲取自己手機合適的尺寸                   StringBuffer sb = new StringBuffer();                   List sizeList = parameters                           .getSupportedPreviewSizes();                   Iterator itor1 = sizeList.iterator();                   while (itor1.hasNext()) {                       Camera.Size cur = itor1.next();                       String str = cur.height + "x" + cur.width + ":";                       sb.append(str);                   }                   Log.i("Travel", "sb……" + sb.toString());                   Editor editor = g3_setting.edit();                   editor.putString(AppData.G3_CAMERA_SIZE, sb.toString());                   editor.commit();               }               // 設置分辨率               pic_Width = g3_setting.getInt(AppData.G3_PIC_WIDTH, 800);               pic_Height = g3_setting.getInt(AppData.G3_PIC_HEIGHT, 640);               Log.i("Travel", pic_Height + ":" + pic_Width);               // 設置照片大小               parameters.setPictureSize(pic_Width, pic_Height);     // 獲得相機參數 Camera.Parameters parameters = camera.getParameters(); if (TextUtils.isEmpty(g3_setting.getString(AppData.G3_CAMERA_SIZE, ""))) { // 獲取自己手機合適的尺寸 StringBuffer sb = new StringBuffer(); List sizeList = parameters .getSupportedPreviewSizes(); Iterator itor1 = sizeList.iterator(); while (itor1.hasNext()) { Camera.Size cur = itor1.next(); String str = cur.height + "x" + cur.width + ":"; sb.append(str); } Log.i("Travel", "sb……" + sb.toString()); Editor editor = g3_setting.edit(); editor.putString(AppData.G3_CAMERA_SIZE, sb.toString()); editor.commit(); } // 設置分辨率 pic_Width = g3_setting.getInt(AppData.G3_PIC_WIDTH, 800); pic_Height = g3_setting.getInt(AppData.G3_PIC_HEIGHT, 640); Log.i("Travel", pic_Height + ":" + pic_Width); // 設置照片大小 parameters.setPictureSize(pic_Width, pic_Height);[html] view plaincopyprint? 如果只講分辨率,覺得本篇博文講的太少了,那麼再加入兩個知識點,使surfaceView開發相機程序時,為什麼,鏡頭是倒著的、圖片是倒著的,以及解決方案。   如果只講分辨率,覺得本篇博文講的太少了,那麼再加入兩個知識點,使surfaceView開發相機程序時,為什麼,鏡頭是倒著的、圖片是倒著的,以及解決方案。毋庸置疑,鏡頭設置也是由硬件支持的,大部分支持,少部分不支持。         關於鏡頭左轉90的問題。   相機經常捕獲的畫面和手機方向不一致,比如手機是豎著拿的,但是畫面是橫的,這是由於攝像頭默認是根據橫向來捕獲畫面的,但你的手機是豎著的。     解決辦法:   在設置相機參數時加入如下代碼     [html]   // 設置鏡頭翻轉   if (Integer.parseInt(Build.VERSION.SDK) >= 8) {       setDisplayOrientation(camera, 90);   } else {       parameters.setRotation(90);   }     // 設置鏡頭翻轉 if (Integer.parseInt(Build.VERSION.SDK) >= 8) { setDisplayOrientation(camera, 90); } else { parameters.setRotation(90); } [java]  protected void setDisplayOrientation(Camera camera, int angle) {       Method downPolymorphic;       try {           downPolymorphic = camera.getClass().getMethod(                   "setDisplayOrientation", new Class[] { int.class });           if (downPolymorphic != null)               downPolymorphic.invoke(camera, new Object[] { angle });       } catch (Exception e1) {       }   }     protected void setDisplayOrientation(Camera camera, int angle) { Method downPolymorphic; try { downPolymorphic = camera.getClass().getMethod( "setDisplayOrientation", new Class[] { int.class }); if (downPolymorphic != null) downPolymorphic.invoke(camera, new Object[] { angle }); } catch (Exception e1) { } }關於圖片保存時,左轉90度的問題,原因如上所述   解決辦法:     [java]   if (AppData.isLandscape) { // 豎拍        Matrix matrix = new Matrix();       matrix.reset();       matrix.postRotate(90);       bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),               bMap.getHeight(), matrix, true);       bMap = bMapRotate;       }       BufferedOutputStream bos = new BufferedOutputStream(               new FileOutputStream(file));     if (AppData.isLandscape) { // 豎拍 Matrix matrix = new Matrix(); matrix.reset(); matrix.postRotate(90); bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), matrix, true); bMap = bMapRotate; } BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(file));[java] view plaincopyprint? bMap.compress(Bitmap.CompressFormat.PNG, 100, bos);// 將圖片壓縮到流中            bos.flush();// 輸出            bos.close();// 關閉     bMap.compress(Bitmap.CompressFormat.PNG, 100, bos);// 將圖片壓縮到流中 bos.flush();// 輸出www.2cto.com bos.close();// 關閉       歡迎大家踴躍交流!       博客出自:http://blog.csdn.net/liuxian13183
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved