2012-07-05 72 views
1

我正在使用手機相機的Android應用程序,我正在使用自定義代碼。自定義相機Andorid預覽圖片不同於顯示圖片

問題是圖像在預覽中顯示不正確(圖像寬高比不正確)。

如果我使用下面的代碼:

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

    Camera.Parameters params = mCamera.getParameters(); 
    List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
    Camera.Size selected = sizes.get(0); 
    params.setPreviewSize(selected.width,selected.height); 
    mCamera.setParameters(params); 
    mCamera.startPreview(); 

預覽圖像OK(我覺得像頂部和底部的少部分不顯示)。

然後問題是捕獲的圖像顯示後,takePicture方法被調用顯示不正確(圖像縱橫比不正確,圖像似乎被壓縮到視圖中),即使如此,如果我將圖片保存到一個文件圖像看起來沒問題。

我想知道在這兩種情況下是否可以正確顯示圖像。建議?

回答

3

該解決方案很容易,但我不知道我必須設置正確的縱橫比手動(它不是一個自動的過程,我認爲這是和這一步,它沒有解釋大多數如何)。最後,我解決了這種方式:

  1. 使用params.getSupportedPreviewSizes()params.getSuppertedPictureSize()入門支持的尺寸。

  2. 計算根據在surfaceChanged(SurfaceHolder holder, int format, int width, int height)傳遞的措施widthheight最好寬高比(寬度/高度)。

  3. 在調用startPreview()方法之前,分別使用setPreviewSizesetPictureSize來設置最佳預覽大小和圖片大小。

+0

你有這樣的示例項目/代碼嗎? – 2014-02-06 13:55:02

+0

看看開放式攝像頭的長寬比並不是最差的。但你可以清理一下 – 2017-09-15 14:17:43

0

如果您保存了圖像並且顯示正確,則問題不在於圖像正在拍攝,而是您如何顯示給用戶。如果您使用的是ImageView,請確保您使用的是src(而不是背景),因爲src將保持寬高比,但背景會拉伸並扭曲圖像以填充背景。同樣,您可以設置android:adjustViewBounds =「true」以使ImageView調整其邊界以保持高寬比。

+0

就是你說的。但是我沒有使用ImageView,因爲在調用takePicture方法後圖像會自動顯示,所以我認爲圖像顯示在曲面中。我如何控制它? – megatxi 2012-07-05 19:11:31

+0

你應該顯示你拍攝照片的方式以及你以後如何處理的代碼,因爲沒有這些信息我不能幫你 – Guardanis 2012-07-05 19:34:03

+0

我正在使用我的活動課程拍攝照片\t \t \t mCamera.takePicture (null,null,image); '圖像'是PictureCallback。到目前爲止,我並沒有對這些照片做任何事情。我在另一個類中實現了一個SurfaceView,其中聲明瞭方法surfaceCreated和surfaceChanged(最後一個我如上所述)。 – megatxi 2012-07-05 19:47:02