2011-05-04 78 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