2010-03-30 62 views
36

我嘗試了幾件事情,試圖讓相機預覽在肖像上以SurfaceView顯示。沒有工作。我正在測試一個2.0.1的Droid。我想:Android Camera在人像上的SurfaceView

1)迫使佈局由變爲縱向:​​

2)使用

Camera.Parameters parameters = camera.getParameters(); 
parameters.set("orientation", "portrait"); 
parameters.setRotation(90); 
camera.setParameters(parameters); 

有沒有別的東西,我可以試試嗎?如果這是Android或手機中的錯誤,我該如何確保這種情況,以便我有證據通知客戶?

感謝, 人員Prasanna

+0

看一看 - http://stackoverflow.com/questions/10259299/force-a-camera-to-always-open-in-portrait-mode-in-android/10259572#10259572 – 2012-04-22 06:32:58

+0

可以在任何一個幫助http://stackoverflow.com/questions/28379130/how-to-set-camera-image-orientation – 2015-02-07 13:37:05

回答

10

我有一個工作解決方案的肖像模式工作2.1(慾望測試)可能更少。

活動屏幕方向設置爲縱向。 (機器人:screenOrientation = 「縱向」)

相機參數:

Camera.Parameters P = mCamera.getParameters();

p.set("jpeg-quality", 100); 
p.set("orientation", "landscape"); 
p.set("rotation", 90); 
p.setPictureFormat(PixelFormat.JPEG); 
p.setPreviewSize(h, w);// here w h are reversed 
mCamera.setParameters(p); 

並且圖像將是人像。你用相機

SurfaceHolder必須在一個大小與手機預覽大小 usualy屏幕分辨率兼容。

滑稽的慾望2.2是不工作... 這裏是修復:

At surfaceCreated(..) or when you have this line 
camera = Camera.open(); 
     add 
camera.setDisplayOrientation(90);//only 2.2> 

Camera.Parameters p = camera.getParameters(); 
    p.set("jpeg-quality", 100); 
p.setRotation(90); 
p.setPictureFormat(PixelFormat.JPEG); 
p.setPreviewSize(h, w); 
camera.setParameters(p); 
0

有沒有需要你,直到你需要做的,明確設定爲取向的任何參數。默認情況下,它支持這個工具。在我的情況下,我有一個活動和以上的活動,我有一個相機視圖,所以我沒有設置相機屬性的任何方向,而是我在Manifest文件中設置方向爲肖像的活動。現在這款應用看起來很不錯,效果很好可能對某些人有幫助..

謝謝。

61

隨着API的LVL 8,這是可供選擇:

公衆最終無效setDisplayOrientation(INT度)

即與清單波泰特:

public void surfaceCreated(SurfaceHolder holder) { 
    mCamera = Camera.open(); 
    mCamera.setDisplayOrientation(90); 
+12

我已經這樣做,但我得到的字節[]仍然給了我一張風景照片。 – tasomaniac 2012-12-28 13:11:39

+3

Set mCamera.setDisplayOrientation(90);相機視圖好,但是視頻結果不一樣Camera View,它不旋轉90.爲什麼? – mum 2014-01-09 09:04:30

+0

嘿,你可以使用param.setRotation(..)方法。我仍然試圖弄清楚它是如何工作的。這很棒! – sunlover3 2016-10-31 10:53:08

10

你可以試試這個(好爲2.2或更低)。在保存到SD卡之前,我在這裏旋轉圖像。但它只適用於肖像模式。如果你必須爲兩種模式製作,那麼你應該檢查相機的方向,並在拍攝圖像之前進行一些檢查。

PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera camera) { 
     FileOutputStream outStream = null; 
     try { 
     imageFilePath = getFilename(); 
     InputStream is = new ByteArrayInputStream(data); 
     Bitmap bmp = BitmapFactory.decodeStream(is); 
     // Getting width & height of the given image. 
     if (bmp != null){ 
      int w = bmp.getWidth(); 
      int h = bmp.getHeight(); 
      // Setting post rotate to 90 
      Matrix mtx = new Matrix(); 
      mtx.postRotate(90); 
      // Rotating Bitmap 
      Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 
      outStream = new FileOutputStream 
           (String.format(imageFilePath,System.currentTimeMillis())); 
      outStream.write(byteArray); 
      outStream.close(); 
     } else { 
      outStream = new FileOutputStream 
           (String.format(imageFilePath,System.currentTimeMillis())); 
      outStream.write(data); 
      outStream.close();   
     }  

     preview.camera.startPreview(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
    } 
    } 
}; 
+1

此代碼用於旋轉圖像,而不是按照要求預覽。 – 2013-07-09 18:02:14

相關問題