我一直在试图弄清楚是否有一种方法可以使用相机拍摄视频/照片而不定义表面视图或文本审查。我找到了这个链接:使用没有surface View的Android相机
我在我的nexus平板电脑上使用了这个技巧,但是没有运气!此外,http://handycodeworks.com/?p=19表示,这种方法并不适用于所有设备。
有没有人知道是否有办法做到这一点?或者它只是android框架根本不支持的东西,GUI必须在布局中有一些表面/纹理元素?那么唯一的选择就是根据应用程序的要求,操纵布局,使其在屏幕上不可见。
编辑1:如上面的链接http://handycodeworks.com/?p=19所述,我尝试了以下代码:
public class CameraCapture {
// I pass the getApplicationContext() from the main activity.
public void startCameraCapture(Context contx) {
SurfaceView sv = new SurfaceView(contx);
mCamera = Camera.open();
mCamera.setPreviewDisplay(sv.getHolder());
mCamera.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
Log.v("TAG", "on preview frame called");
}
Thread.sleep(1000);
mCamera.startPreview();
}
然而,onPreviewFrame()从未被调用。我错过什么了吗?
编辑2:是否可以在本机代码中执行?捕捉视频/使用相机没有GUI元素(surfaceview/textureview)使用OpenCV?我看了这个链接:http://docs.opencv.org/trunk/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization。但是,它们也显示了在主布局xml文件中定义了一些相机视图元素的示例代码。
我可以这样定义SurfaceTexture对象:
SurfaceTexture surfaceTexture = new SurfaceTexture(10);
<camera object>.setPreviewTexture(surfaceTexture);
在这里,我不需要在应用程序中定义GUI元素。
这是周期性的。
这取决于你所瞄准的API级别。API 11 (Honeycomb)引入了SurfaceTexture类,它将传入的帧定向到一个GLES纹理而不是一个可见窗口。你可以在CameraToMpegTest中看到它,它可以"无头"录制视频到。mp4(需要API 18用于所有视频内容)。
如果你的目标是2.3。