![](/img/trans.png)
[英]How to reliably determine the maximum image size displayable by ImageView without setting up an OpenGL context?
[英]Using OpenGL for Image Processing - Setting up an OpenGL context
我想對原始圖像進行圖像處理而不將其顯示在屏幕上(我想根據圖像數據進行一些計算,並根據這些計算在屏幕上顯示一些結果。)我找到了這個問題的有趣答案,如下所示:
在GPU上進行實際處理:設置OpenGL上下文(OpenGL ES 2教程),並在該上下文中創建SurfaceTexture對象。 然后將該對象傳遞給setPreviewTexture,然后開始預覽。 然后,在OpenGL代碼中,可以調用SurfaceTexture.updateTexImage,與SurfaceTexture關聯的紋理ID將更新為相機的最新預覽幀。 如果需要,還可以使用glReadPixels將RGB紋理數據讀回CPU,以進行進一步處理。
我有一個關於如何實施它的問題。
我是否需要創建GLSurfaceView
和Renderer
,實際上我不想使用OpenGL在屏幕上繪制任何東西,所以不確定是否需要它們? 從我在線閱讀的內容來看,為了設置OpenGL上下文而擁有這些內容似乎非常重要? 有人可以給我任何指示嗎?
您不必使用 GLSurfaceView
。 GLSurfaceView
是一個純粹用Java編寫的便利類。 它簡化了想要在Android中使用OpenGL渲染的應用程序的設置部分,但其所有功能也可以通過Android框架中的較低級接口使用。
對於純屏幕外渲染,您可以使用EGL接口創建上下文,表面等。有些令人困惑的是,Android框架的完全不同的部分有兩個版本:
javax.microedition.khronos.egl
軟件包中的EGL10
和EGL11
。 android.opengl
包中的EGL14
,自API級別17起可用。 它們相當相似,但是較新的EGL14
顯然具有更多功能。 如果您的目標至少是API級別17,那么我會選擇較新的版本。
然后,使用EGL14
類中的方法,您可以創建上下文,表面等。對於屏幕外渲染,一種選擇是創建用於渲染的Pbuffer表面。 要完成設置,通常將使用以下功能:
eglInitialize
eglChooseConfig
eglCreatePbufferSurface
eglCreateContext
eglMakeCurrent
Android文檔並未真正描述這些功能,但是您可以在Khronos網站上找到實際的文檔: https : //www.khronos.org/registry/egl/sdk/docs/man/ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.