Seb*_*Seb 5 android surfaceview android-camera
我正在为Android构建一个应用程序,但该设备有一个方形屏幕.屏幕为320x320,相机应用程序使用SurfaceView显示预览,如下所示:
mCameraView = (SurfaceView) findViewById(R.id.surface);
LayoutParams params = mCameraView.getLayoutParams();
int camera_dimension = getResources().getInteger(R.integer.camera_dimension);
params.height = camera_dimension; //320px
params.width = camera_dimension;
mCameraView.setLayoutParams(params);
mCameraViewHolder = mCameraView.getHolder();
mCameraViewHolder.addCallback(this);
mCameraViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Run Code Online (Sandbox Code Playgroud)
在Surface上改变了,我正在做这个并且它可以工作,但支持者预览是w480 x h320
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
int mWidth = w;
int mHeight = h;
int mFormat = format;
try {
mCameraAccess.mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
Camera.Parameters param = mCameraAccess.mCamera.getParameters();
List<Camera.Size> SupportedPreview = param.getSupportedPreviewSizes();
int ScreenSize = getResources().getInteger(R.integer.camera_dimension);
for (int i = 0; i < SupportedPreview.size(); i++) {
if (SupportedPreview.get(i).height == ScreenSize) {
param.setPreviewSize(SupportedPreview.get(i).width, SupportedPreview.get(i).height);
break;
}
}
mCameraAccess.mCamera.setParameters(param);
mCameraAccess.mCamera.startPreview();
}
Run Code Online (Sandbox Code Playgroud)
如何确保我在视图中的预览不是压缩而是一种中心作用.由于预览是一个矩形,我只需要以图像为中心的正方形.通常我使用的是scaleType,但Surface视图中不支持它
任何的想法 ?
我想出的解决方案是:
1) - 全屏保持表面视图,这样就不会拉伸.
2) - 在具有完全不透明度的surfaceview上进行视图.所以看起来像相机已经被平方.
3) - 捕获图像或视频后,您将不得不裁剪它们.
对于视频,您必须使用一些视频处理库,如javacv.使用此库,您可以提取视频帧,将它们转换为位图,在方块中裁剪位图,然后重新编码为视频.
为了获得准确的结果,您需要根据需要使用不同的技术,例如在捕捉期间缩放相机等.
原始图片:
平方图像:
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |