2011-05-04 77 views
15

嗨 我想用我的應用程序之一中的相機捕捉圖像。有什麼特別的是我需要一個正方形的預覽區域(最後是圖片)。我嘗試將圖片和預覽的大小定義爲1:1像素比例,但沒有任何接縫可以工作。不管我做了什麼,照片看起來都在一個正方形上「壓扁」了。Android相機預覽:1:1寬高比,怎麼樣?

任何人有任何想法如何解決這個問題?

代碼:

public class AddFromCameraActivity extends Activity implements SurfaceHolder.Callback { 
private Camera mCamera; 
private Parameters mParameters; 
private SurfaceView mCameraPreview; 
private SurfaceHolder mSurfaceHolder; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.addimagefromcameramain); 
    initialise(); 
    //Testing area 
    mCamera = Camera.open(); 
    mParameters = mCamera.getParameters(); 
    mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); 
    mParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
    mParameters.setJpegQuality(50); 
    mParameters.setJpegThumbnailQuality(50); 
    mParameters.setPictureSize(1024, 1024); 
    //mParameters.setPreviewFormat(ImageFormat.JPEG); 
    mParameters.setJpegThumbnailSize(256, 256); 
    mParameters.setPreviewSize(500, 500); 
    mCamera.setParameters(mParameters); 
} 
private void initialise() 
{ 
    mCameraPreview = (SurfaceView)findViewById(R.id.cameraSurfaceView); 
    mSurfaceHolder = mCameraPreview.getHolder(); 
    mSurfaceHolder.addCallback(this); 
    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    mSurfaceHolder.setFixedSize(500, 500); 
} 
@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 

} 
@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    try { 
     mCamera.setPreviewDisplay(mSurfaceHolder); 
     mCamera.startPreview(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    mCamera.stopPreview(); 
    mCamera.release(); 
} 
@Override 
public void onPause() 
{ 
    mCamera.release(); 
} 
} 

感謝

回答

4

你可以看看從Android SDK中CameraPreview sample代碼。 getOptimalPreviewSize方法顯示如何處理不同的相機尺寸,onLayout方法顯示如何在活動中佈置預覽表面。

+0

谷歌搜索CameraPreview實現,並發現這一點。它似乎處理不同的長寬比。得試試它。 https://github.com/pocorall/scaloid-apidemos/blob/master/src/main/java/com/example/android/apis/graphics/CameraPreview.java – akhyar 2014-02-07 13:38:51