修改实时摄像头视图 [英] Modify live camera view
问题描述
如何在Android上修改实时摄像机视图?
How can I modify live camera view on Android?
我正在搜索并找到此应用程序 https://play .google.com/store/apps/details?id = com.fingersoft.cartooncamera 作为我想做的很好的例子.我也想对相机视图应用一些效果.我需要找到一种方法来添加一些效果或在我的相机视图上绘制一些东西.
I was searching and found this app https://play.google.com/store/apps/details?id=com.fingersoft.cartooncamera as good example what I want to do. I wanted to apply some effect to my camera view as well. I need to find a way to add some effects or draw something on my camera view.
据我了解,我必须获取一些视频流,应用一些更改并在相机视图中显示.
As far as I understood I have to get some video stream, apply some changes and show back in camera view.
有什么想法吗?
非常感谢!
推荐答案
您可以找到有关此主题的更多信息 Android -摄像头预览,并且在此 OpenCV .
You can find more information about this topic Android - Camera Preview and in this post. A completely other approach would be to use OpenCV.
获取图像并在屏幕上预览的最小代码段看起来像这样:
The smallest piece of code I could think of to get an image and preview it on the screen looks like this:
public class MainActivity extends Activity implements Callback {
Camera camera;
SurfaceView surfaceView;
SurfaceHolder holder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
}
@Override
protected void onResume() {
super.onResume();
camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
camera.setParameters(parameters);
holder = surfaceView.getHolder();
holder.addCallback(this);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
// You could apply some pixel operations directly here.
Log.d("Camera", "Camera image aquired");
}
});
}
@Override
protected void onPause() {
super.onPause();
camera.stopPreview();
camera.release();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
执行此操作的完整示例可以在 GitHub上找到.
A full example that does this, can be found on GitHub.
这篇关于修改实时摄像头视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!