android - 使用没有 surfaceview 或 textureview 的相机

标签 android android-layout opencv android-intent android-camera

我一直在尝试找出是否有一种方法可以在不定义表面 View 或纹理 View 的情况下使用相机拍摄视频/图片。我找到了这个链接:Use Android Camera without surface View

我在我的 nexus 平板电脑上使用了这个技巧和 textureview 但没有运气!另外,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:

是否可以在 native 代码中执行?使用 OpenCV 在没有 GUI 元素(surfaceview/textureview)的情况下捕获视频/使用相机?我查看了这个链接:http://docs.opencv.org/trunk/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization .但是,它们还显示了示例代码,其中包含在主布局 xml 文件中定义的一些相机 View 元素。

最佳答案

我可以通过如下定义 SurfaceTexture 对象来做到这一点:

SurfaceTexture surfaceTexture = new SurfaceTexture(10);
<camera object>.setPreviewTexture(surfaceTexture);

在此,我不需要在应用程序中定义 GUI 元素。

关于android - 使用没有 surfaceview 或 textureview 的相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22462360/

相关文章:

android - 在基于 Android Gradle 的项目中设置集成测试

Android Kotlin 无法更改函数内的文本字符串

python - 当输入来自CGI时,如何在OpenCV中读取解析图像

python - 在Python Bluemix服务器中写入图像

java - 特定索引的 Hashmap 替换数组列表

android - 在 qt (qml) 中更改原生样式组合框的文本颜色

android - 如何从 Android 设备上的后台服务使屏幕闪烁/闪烁?

android - 如何在约束布局中创建副本并对齐一组 View ?

C++ 应用程序控制台未退出

java - 我的 soundpool 项目无法正常播放?