【发布时间】:2015-01-20 10:34:09
【问题描述】:
我正在尝试在 SurfaceView 中设置相机预览 当我在 Surface 中设置相机时,它看起来像拉伸预览。 我该如何解决?
`public class CamActivity extends Activity implements SurfaceHolder.Callback`
`{`
`Camera camera;`
`SurfaceView surface;`
`SurfaceHolder mholder;`
`Button capture;`
`Bitmap bitmap;`
`public String path = Environment.getDataDirectory().getAbsolutePath() + "/storage/emulated/0/Pictures/Cam";`
@Override
`protected void onCreate(Bundle savedInstanceState) `
`{`
` super.onCreate(savedInstanceState);`
` setContentView(R.layout.activity_cam);`
` surface=(SurfaceView)findViewById(R.id.camera_view);`
` if(mholder==null)`
` mholder=surface.getHolder();`
` mholder.addCallback(this);`
`mholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);`
`capture=(Button)findViewById(R.id.camera_capture);`
`File mFolder = new File(path);`
`if (!mFolder.exists()) {`
` mFolder.mkdir();`
`}`
`capture.setOnClickListener(new OnClickListener() {`
` @SuppressWarnings("deprecation")`
` @Override`
` public void onClick(View v) {`
` camera.takePicture(null, null, new PictureCallback()`
` {`
@Override
` public void onPictureTaken(byte[] data, Camera camera)`
` {`
` Random generator = new Random();`
` int n = 10000;`
` n = generator.nextInt(n);`
` String fname = "Image-"+ n +".jpg";`
` File pictureFile = new File(Environment.getExternalStoragePublicDirectory(`
` Environment.DIRECTORY_PICTURES)+"/", fname);`
` try {`
` FileOutputStream fos = new FileOutputStream(pictureFile);`
` bitmap.compress(Bitmap.CompressFormat.JPEG,90, fos);`
` fos.flush();`
` fos.close();`
` } catch (FileNotFoundException e) {`
`Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();`
` } catch (IOException e) {`
`Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();`
` }`
` }`
` });`
` }`
`});`
`}`
@Override
`public void surfaceCreated(SurfaceHolder holder) `
`{`
` camera=Camera.open();`
` try`
` {`
` camera.setPreviewDisplay(holder);`
` Toast.makeText(getApplicationContext(), path, Toast.LENGTH_LONG).show();`
` } `
` catch (IOException exception)`
` {`
` camera.release();`
` camera = null;`
` }`
`}`
@Override
`public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) `
`{`
` camera.startPreview();`
` camera.setDisplayOrientation(90);`
`}`
@Override
`public void surfaceDestroyed(SurfaceHolder holder)`
`{
` camera.stopPreview();`
` camera.release();`
` camera = null;`
`}`
`}`
【问题讨论】:
-
你能把你的代码放上去吗?
-
您的 Surfaceview 尺寸与视频尺寸不同。要么与宽度成比例地减小高度,要么使用相机按钮使宽度全屏显示,作为其顶部的叠加层。
-
如何设置相同的尺寸? @Shobhit 普里
-
检查我的代码#Moradiya Aksh
-
查看 Grafika 获取一些示例 (github.com/google/grafika)。它展示了使用自定义布局 (
AspectFrameLayout) 来设置 SurfaceView 的大小,并使用视图矩阵而不是布局通过 TextureView 完成相同的事情。
标签: android android-layout android-camera surfaceview screen-resolution