采取的SurfaceView图像与显示的不同

时间:2011-12-07 03:29:56

标签: android android-layout surfaceview android-camera

我创建了一个布局,我的表面视图已从“原始大小”调整大小,我做了以下内容:

    ViewGroup.LayoutParams params = mSurfaceView.getLayoutParams();
    int mPixels=getResources().getDimensionPixelSize(R.dimen.profile_pic_dimension); //200
    params.width=mPixels;
    params.height=mPixels;
    mSurfaceView.setLayoutParams(params);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

我得到一个这样的视图: http://img412.imageshack.us/img412/9379/layoutp.png

但是然后..每当我拍照时......它不会像我在视图上看到的那样保存...而是保存它的正常大小,就像视图占据整个屏幕一样(如果表面视图从未调整过。)

我试过用这个:

Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() {
    @Override
    public void onShutter() {
        Camera.Parameters p = mCamera.getParameters(); 
                p.setPictureSize(mSurfaceView.getWidth(), mSurfaceView.getHeight()); 
               mCamera.setParameters(p); 
        }
    };

但仍未获得我想要的图像尺寸。

1 个答案:

答案 0 :(得分:0)

设置图片(或预览)尺寸时,您不能只提供任何宽度和高度值。相反,您必须使用支持大小列表中的一个项目,您可以通过调用getSupportedPictureSizes()来检索这些项目(预览的等价物)。

到目前为止,我还没有遇到任何支持拍摄方形照片的设备,所以在4:3,16:9,16:10之后,无论比例如何,拍摄的照片都是“剪切”的自己输出相关部分,并可选择将其缩小到特定维度。可能最直接的方法是创建一个new Bitmap as a subset from a source Bitmap(然后可选择缩小它)。为了获得源位图,您可能需要使用takePicture(...)PictureCallback连接到相机。