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

Android将GLSurfaceView与摄像头的SurfaceView叠加

符渊
2023-03-14

我希望在相机顶部放置一个openGL模型(通过GLSurfaceView),它有自己的SurfaceView。当然这一定是可能的,像Layar这样的应用程序可以做到这一点。

以下是我正在尝试的:

public class MainActivity extends Activity {


    private CameraSurfaceView mCameraSurfaceView; 
    private GLSurfaceView mCubeGLSurfaceView; 
    private FrameLayout mFrameLayout; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        mFrameLayout = new FrameLayout(this); 

        mCameraSurfaceView = new CameraSurfaceView(this);

        mCubeGLSurfaceView = new GLSurfaceView(this);
        mCubeGLSurfaceView.setRenderer(new CubeRenderer()); 
        //mCubeGLSurfaceView.setZOrderMediaOverlay(true);

        mFrameLayout.addView(mCameraSurfaceView); 
        mFrameLayout.addView(mCubeGLSurfaceView); 

        setContentView(mFrameLayout); 

    }

}

现在:只有相机出现了。我在网上读到过关于GLSurfaceView的setzordermeDiagoverlay属性的文章;在上面的代码中设置为TRUE,3D立方体显示为黑色背景(即不显示相机预览)。

参考文献:

  • 以下是我使用的Cube OpenGL代码:http://intransitione.com/blog/create-a-spinning-cube-with-opengl-es-and-android/

我尝试过的其他测试:更改相应SurfaceView的addView顺序没有帮助;它只显示摄像头(我在某处读到,更改addView顺序可能会有所帮助)。

谢谢你的帮助!

共有1个答案

邴俊达
2023-03-14

由于您声明当前只有相机预览可见,因此可能是您没有正确排序视图。这就是我为创建您想要的东西所做的。

在活动中,创建源自GLSurfaceView的MySurfaceView实例源自SurfaceView的MyCameraPreview实例

在我的活动的onCreate方法中,我执行以下操作:

mySurfaceView = new MySurfaceView(this);
addContentView(mySurfaceView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
myCameraPreview = new MyCameraPreview(this, myCamera);
addContentView(myCameraPreview, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

请注意,使用此方法时,您不会使用布局xml。

这将创建两个相互重叠的视图,并在背景中使用相机预览。

现在你需要让MySurface视图绘制一个透明的背景,这样相机预览就会显示在你渲染的对象后面。如果您使用的是OpenGL ES 2.0,请将其添加到MySurfaceView类的构造函数中。

setEGLContextClientVersion(2);
setEGLConfigChooser(8,8,8,8,16,0);
getHolder().setFormat(PixelFormat.TRANSLUCENT);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

我只是自己完成了这个过程,所以我可能错过了一些细节。

 类似资料:
  • 问题内容: 我之前曾问过一个问题,但没有收到任何回应,因此我正在尝试 。 我需要在 Android 3.0的Motorola Xoom上绘制带有一些随附标签和图形的2D图片。尽管我只需要用 SurfaceView(Canvas)或GLSurfaceView即可完成操作,但我真的很想同时使用这两者, 因为使用GLSurfaceView可以更快地渲染,而 使用SurfaceView可以更轻松地标记和图

  • 我需要在曲面视图上进行GLSURFACHEVIEW。GLSurface view将有一个渲染器,SurfaceView将是摄影机视图。 下面是我的布局 在我的活动中,我得到了下面这样的表面视图 在这里我的glView是来作为null.如何实现这一行为在一个正确的方式?

  • 我有一个Android应用程序,显示视频使用gstream er。它类似于这里提到的教程: http://docs.gstreamer.com/display/GstSDK/Android教程3:视频 特别是,它使用GStreamerSurfaceView扩展了SurfaceView。 我现在想执行一些处理视频与另一个库,使用GLSurfaceView: 我怎么能"插入"GLSurfaceView

  • 我目前正在开发一款只使用2D图形的游戏。 在游戏中,我广泛使用android的来显示我的图形。我听说,使用硬件加速图形,我可以使用它来提高我的应用程序的性能,而不是使用当前的。 目前,我有一个扩展的类,当我自己的线程类扩展调用和方法时,它会更新和渲染游戏状态。线程基本上帮助我保持几乎恒定的FPS。 现在的问题是:我如何从更改为,并调用方法从线程更新和渲染游戏状态,以仍然控制FPS。我阅读了Open

  • 表情测试 图片转文字 相框 拍摄图片

  • 摄像头用于采集图像和影像信息,通过模块间的组合完成各种创意活动。 净重量:8.1g 体积:24×24×22mm 参数 分辨率:1280×720 像素大小:3.4um×3.4um 最大图像传输速率:全尺寸 @ 30fps 视场角:100° 镜片结构:4G+IR 焦比:2.97 有效焦距:2.4mm 功耗:100uA(待机)~240mW(工作) 电源:USB总线电源 抗跌落能力:1m 工作温度:-30