当前位置: 首页 > 知识库问答 >
问题:

Android相机GLSurfaceView

呼延曜灿
2023-03-14

请,有人能提供一个使用CameraX库和GLSURFACHEVIEW的好例子吗?找不到任何信息。

共有2个答案

赖渊
2023-03-14

它不是直接的GLSurfaceView,而是OpenGL的一个示例。您可以使用OpenGLRenderer获得效果。

左丘照
2023-03-14

使用自定义表面/纹理视图的相机的留档不存在。在Cameron aX测试版发布后,许多应用编程接口都发生了变化,因此现有的在线示例只能使用alpha版本。链接用于在alpha-xx版本中使用文本视图/GLSUrfaceView:https://github.com/android/camera-samples/tree/master/CameraXBasic

但是,这些示例不适用于最新的beta-02(截至今天)版本。

请参考下面的示例,我用它来创建一个纹理视图与相机API。

渐变依赖项:

dependencies{
def camerax_version = "1.0.0-beta02"
.....
    implementation "androidx.camera:camera-core:$camerax_version"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:$camerax_version"
    implementation "androidx.camera:camera-view:1.0.0-alpha09"
...
}

创建预览活动:(Kotlin示例,但与Java类似)

class Capture : AppCompatActivity(), CameraXConfig.Provider {
    // ur code


private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider>
    private lateinit var viewFinder: TextureView // Created in view file 
   // ur code


override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_capture)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

// CameraX related Code 
        cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        viewFinder = findViewById(R.id.view_finder)

        cameraProviderFuture.addListener(Runnable {
            val cameraProvider = cameraProviderFuture.get()
            bindPreview(cameraProvider)
        }, ContextCompat.getMainExecutor(this))

     // ur code here 
    }
}

private fun bindPreview(cameraProvider : ProcessCameraProvider) {
        var preview : Preview = Preview.Builder()
            .build()

        var cameraSelector : CameraSelector = CameraSelector.Builder()
            .requireLensFacing(CameraSelector.LENS_FACING_BACK)
            .build()
var camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
        val surfaceTexture = (view_finder as TextureView).surfaceTexture
        val surface = Surface(surfaceTexture)
        val executor = Executors.newSingleThreadExecutor()
        val previewSurfaceProvider = PreviewSurfaceProvider(surface, executor)
        preview.setSurfaceProvider(executor,previewSurfaceProvider)
        cameraProvider.bindToLifecycle(this, cameraSelector, preview)
    }

现在创建一个SurfaceProvider类。

import android.view.Surface
import androidx.camera.core.Preview
import androidx.camera.core.SurfaceRequest
import androidx.core.util.Consumer
import java.util.concurrent.Executor
import java.util.concurrent.Executors

class PreviewSurfaceProvider (private val surface: Surface, private val executor: Executor): Preview.SurfaceProvider {

    override fun onSurfaceRequested(request: SurfaceRequest) {
        request.provideSurface(surface, executor, Consumer { result: SurfaceRequest.Result ->  {
            TODO("Not yet implemented")
        }})
    }

}

创建视图xmlactivity_capture.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    // Can be replaced with GLSurfaceView
    <TextureView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/view_finder"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

希望这有帮助。

 类似资料:
  • 我正在开发一个React Native软件包,以获取Android设备上摄像头的信息。问题是并不是所有的摄像机都出现了。 我的代码如下: 这段代码返回以下内容: 这表明它缺少REQUEST\u AVAILABLE\u CAPABILITIES\u LOGICAL\u MULTI\u摄像头。然而,我正在测试的手机有3个后摄像头和1个前摄像头。我错过了什么?

  • 问题内容: 可以模拟Android Camera类吗? 无法生成模拟(在Mockito中)。 我是否应该围绕(不是我最喜欢的解决方案,真的想只模拟类…)创建某种包装器? 或者,我应该使用不同于Mockito的模拟库吗? 希望有人能指出我正确的方向。 的完整堆栈跟踪 问题答案: 在您的堆栈跟踪中,注意子字符串“ .CglibMockMaker”:这就是这里的问题。CGLib在android上不起作用

  • 本文向大家介绍Android相机、图册demo,包括了Android相机、图册demo的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Android相机、图册基本demo,供大家参考,具体内容如下 下面分享具体Android 调用相机、打开相册、裁剪图片的实现代码,内容如下 以上就是关于Android相机、图册的基本操作内容,希望对大家学习Android软件编程有所帮助。

  • 我创建了一个主题为“导航抽屉活动”的项目,我想在左侧菜单上有两个选项: null

  • 我一直在努力在Android上制作我的自定义相机活动,但当旋转相机时,表面视图的纵横比会变得混乱。 在我的oncreate for the activity中,我设置了framelayout,它保存了显示相机参数的曲面视图。 然后,在曲面视图中,我设置要显示的相机参数 您可以看到,当手机旋转时,乐高男会变得更高、更瘦: 如何确保相机视图的纵横比正确?

  • 我正在构建一个类似于图片中所示的条形码扫描器的相机应用程序。我需要同时使用和API来支持android API>=19。 主要的想法是在整个屏幕上有相机预览,但只保存部分没有变暗(或拍摄的区域没有变暗)。我已经做了一些研究,发现通过和API只拍摄一部分照片是不可能的(但我不是100%确定)。所以我想我需要对我接收到的作为相机捕获的结果的字节数组(压缩成JPEG)进行一些操作。 我尝试以这种方式使用