2011-07-15 81 views
5

我遇到了Android中相機輸入的問題。在互聯網上搜索了半天之後,我沒有再進一步了。相機顯示屏不保持長寬比/似乎歪斜

笏我想在這個階段實現正確顯示當前的攝像頭輸入。現在沒有更多,也沒有少。當在橫向模式下握住設備時,一切似乎都很好。但是,只要將設備切換爲縱向,顯示器似乎會水平縮放以匹配設備上的屏幕寬度。

爲了弄清這個問題有點多,我已經把它貼了兩張照片:

好像這個問題也與從相機例子發生API示例,但是當我使用我的設備上的相機應用程序時,似乎不會發生這種情況。很顯然,其他事情正在發生。

是基於可以在互聯網上發現的例子,我正在使用的代碼沒有修改:

class Preview extends SurfaceView implements SurfaceHolder.Callback { 
    SurfaceHolder mHolder; 
    Camera mCamera; 

    Preview(Context context) { 
     super(context); 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     mCamera = Camera.open(); 
     try { 
      mCamera.setPreviewDisplay(holder); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     mCamera.stopPreview(); 
     mCamera = null; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     Camera.Parameters parameters = mCamera.getParameters(); 
     parameters.setPreviewSize(w, h); 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
    } 
} 

的API的例子使用的方法「getOptimalPreviewSize(......)」這聽起來像我需要的方法,但這並沒有改變任何東西。爲了儘可能簡短,我把它放在這裏。

我是否錯過了某些顯而易見的內容或者這是預期的行爲?

希望有人能指出我正確的方向。

在此先感謝!

Paul

+0

失真的效果得到在所附的圖像失去了一點點。但在風景圖像上,電腦屏幕看起來寬屏。在肖像圖像上,它看起來像一個方形的屏幕。 – PaulT

+0

您正在設置的預覽分辨率是多少? – bluefalcon

+0

分辨率取決於設備。在這種情況下,它在Galaxy選項卡上爲1024 x 524。 – PaulT

回答

1

好的,我剛剛找到了我自己的問題的答案。 我解決它是通過去全屏與我的應用程序的方式:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

這使得感一點點,因爲我想我們不能只使用任何分辨率相機的預覽大小。我想它會在內部捕捉到最接近的分辨率/寬高比,並且不會執行任何智能操作,例如裁剪圖像以匹配請求的分辨率,同時保持寬高比。在我的情況下,我顯示的標題欄,而源圖像是全屏,然後縮小到適合在屏幕上。

我認爲這是種笨出寬高比沒有被維持和圖像默認情況下不裁剪,

+0

是的,我現在已經得出同樣的結論。不知道爲什麼相機不會尊重長寬比,因爲您希望通過相機瞭解相機的外觀。 –