Android SurfaceTexture和GLSurfaceView做Camera預覽
GLSurfaceView是OpenGL中的一個類,也是可以預覽Camera的,而且在預覽Camera上有其獨到之處。獨到之處在哪?當使用Surfaceview無能為力、痛不欲生時就只有使用GLSurfaceView了,它能夠真正做到讓Camera的資料和顯示分離,所以搞明白了這個,像Camera只開預覽不顯示這都是小菜,妥妥的。Android4.0的自帶Camera原始碼是用SurfaceView預覽的,但到了4.2就換成了GLSurfaceView來預覽。如今到了4.4又用了自家的TextureView,所以從中可以窺探出新增TextureView的用意。
雖說Android4.2的Camera原始碼是用GLSurfaceView預覽的,但是進行了大量的封裝又封裝的,由於是OpenGL小白,真是看的不知所云。俺滴要求不高,只想弄個可拍照的摸清GLSurfaceView在預覽Camera上的使用流程。經過一番百度一無所獲,後來翻出去Google一大圈也沒發現可用的。倒是很多人都在用GLSurfaceView和Surfaceview同時預覽Camera,Surfaceview用來預覽資料,在上面又鋪了一層GLSurfaceView繪製一些資訊。無奈自己摸索,整出來的是能拍照也能得到資料,但是介面上不是一塊白板就是一塊黑板啥都不顯示。後來在stackoverflow終於找到了一個可用的
一、CameraGLSurfaceView.java 此類繼承GLSurfaceView,並實現了兩個介面
[java] view plaincopyprint?-
<span style="font-family:Comic Sans MS;font-size:18px;">package org.yanzi.camera.preview;
- import javax.microedition.khronos.egl.EGLConfig;
- import javax.microedition.khronos.opengles.GL10;
- import org.yanzi.camera.CameraInterface;
- import android.content.Context;
- import android.graphics.SurfaceTexture;
- import android.opengl.GLES11Ext;
- import android.opengl.GLES20;
-
import
- import android.opengl.GLSurfaceView.Renderer;
- import android.util.AttributeSet;
- import android.util.Log;
- publicclass CameraGLSurfaceView extends GLSurfaceView implements Renderer, SurfaceTexture.OnFrameAvailableListener {
- privatestaticfinal String TAG = "yanzi";
- Context mContext;
- SurfaceTexture mSurface;
- int mTextureID = -1;
- DirectDrawer mDirectDrawer;
- public CameraGLSurfaceView(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- mContext = context;
- setEGLContextClientVersion(2);
- setRenderer(this);
- setRenderMode(RENDERMODE_WHEN_DIRTY);
- }
- @Override
- publicvoid onSurfaceCreated(GL10 gl, EGLConfig config) {
- // TODO Auto-generated method stub
- Log.i(TAG, "onSurfaceCreated...");
- mTextureID = createTextureID();
- mSurface = new SurfaceTexture(mTextureID);
- mSurface.setOnFrameAvailableListener(this);
- mDirectDrawer = new DirectDrawer(mTextureID);
-
相關推薦
Android SurfaceTexture和GLSurfaceView做Camera預覽
GLSurfaceView是OpenGL中的一個類,也是可以預覽Camera的,而且在預覽Camera上有其獨到之處。獨到之處在哪?當使用Surfaceview無能為力、痛不欲生時就只有使用GLSurfaceView了,它能夠真正做到讓Camera的資料和顯示分離,所
Android平臺Camera實時濾鏡實現方法探討(五)--GLSurfaceView實現Camera預覽
前面有一篇探討了如何在片段著色器中將YUV資料轉換為RGB資料並顯示,但採用samplerExternalOES將SurfaceTexture作為OpenGL外部紋理,需要使用GL_TEXTURE_EXTERNAL_OES作為紋理模板,通過SetPreviewTexture
android平臺下OpenGL ES 3.0使用GLSurfaceView對相機Camera預覽實時處理
OpenGL ES 3.0學習實踐 android平臺下OpenGL ES 3.0從零開始 android平臺下OpenGL ES 3.0繪製純色背景 android平臺下OpenGL ES 3.0繪製圓點、直線和三角形 android平臺下OpenGL E
android平臺下OpenGL ES 3.0使用TextureView對相機Camera預覽實時處理
OpenGL ES 3.0學習實踐 android平臺下OpenGL ES 3.0從零開始 android平臺下OpenGL ES 3.0繪製純色背景 android平臺下OpenGL ES 3.0繪製圓點、直線和三角形 android平臺下OpenGL E
Camera預覽尺寸和獲取螢幕寬高。
演算法需要將預覽大小與手機的解析度掛鉤,才能夠在不同解析度的手機上面預覽都不變形。 /** * 獲取最佳預覽大小 * @param parameters 相機引數 * @param screenResolution 螢幕寬高 * @return */ priva
Android手勢識別 Camera 預覽介面上顯示文字 佈局注意事項(merge佈局)
通常在Surfaceview作為預覽視訊幀的載體,有時需在上面顯示提示文字。以前我弄的都好好的,今天忽然發現疊加的TextView不管咋弄都出不來文字了,跟Surfaceview一起放在FrameLayout也不行,後來想到merge佈局,發現也不行。大爺的,奇了怪了,最
Android camera預覽引數以及實際影象大小設定
參考一下兩篇博文: ###########################################################333 PreviewSize是預覽的大小,也就是拍照前看到的圖片大小 PictureSize是指最終拍攝到的圖片的大小,也就
Android Camera預覽時輸出的幀率控制
如果使用MediaCodec硬編碼H264,可以使用下面的方法控制編碼輸出的幀率: MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
Android 5.0 Camera系統原始碼分析(4):Camera預覽流程資料流
1. 前言 上一篇講了怎麼讓Camera進入預覽模式,提到了DisplayClient負責顯示影象資料,而CamAdapter負責提供影象資料,這裡主要記錄了CamAdapter怎麼獲取影象,然後DisplayClient怎麼將影象顯示在螢幕上。 2.
Android 5.0 Camera系統原始碼分析(3):Camera預覽流程控制流
1. 前言 本文分析的是Android系統原始碼,從frameworks層到hal層,記錄了Camera進入預覽模式的重點程式碼,主要為控制流程的程式碼,有關影象buffer的傳遞暫不涉及,硬體平臺基於mt6735。由於某些函式比較複雜,在貼出程式碼時會適當對
Android之Camera預覽過程中插拔攝像頭節點後移
現象: 在使用Camera Preview時;熱插拔攝像頭會導致裝置節點由/dev/video0變為/dev/video1,或者插入多個video裝置時,會變為/dev/video1、/dev/video2......。 一、首先看裝置節點的建立 drivers/media
Android 使Camera預覽清晰,迴圈自動對焦處理
我們經常使用SurfaceView顯示Camera預覽畫面,但畫面基本都不清晰。主要是因為沒有自動對焦,而自動對焦觸發是通過mCamera.autoFocus(autoFocusCallback);這個
Camera 預覽之SurfaceView、TextureView、GLSurfaceView(三)
今天介紹下GLSurfaceView如何使用。GLSurfaceView的包名是android.opengl,由此可以它是opengl的一個類,它也可以預覽camera,而且在預覽camera上有比SurfaceView獨特的優勢,可以做到資料和顯示的分離,比如在沒有螢幕
Android音視訊-視訊採集(Camera預覽)
Camera的使用我們直接根據官網介紹的使用流程,然後細入每個環節的內容,完全掌握Camera的使用。 我們最終的Demo在最後貼上,最終的Demo顯示效果如下: 建立Camera應用 我們快速的來顯示一個相機預覽的程式碼 宣告相機許可權和
Android實現本地圖片選擇及預覽縮放效果仿春雨醫生
在做專案時經常會遇到選擇本地圖片的需求,以前都是懶得寫直接呼叫系統方法來選擇圖片,但是這樣並不能實現多選效果,最近又遇到了,所以還是寫一個demo好了,以後也方便使用。還是首先來看看效果 顯示的圖片使用RecyclerView實現的,利用Glide來載入;下面彈出的圖片資料夾效果是採用
Tcl/tk例項-工具欄和選單-圖片預覽工具
可以開啟並檢視圖片,點選工具欄上 Previous 和 Next 按鈕來瀏覽 前/下 一張。僅僅是一個例子,其它按鈕和選單未新增命令。 package require Ttk package require Img package require base64 package require B
利用FileReader和FormData實現圖片預覽和上傳(base64轉二進位制檔案)
業務有個需求,要做圖片預覽上傳,過去都是客戶端上傳給後端,後端返回 url 前端進行預覽,現在其實可以不依賴後端做預覽,最後在上傳,這主要依賴 FileReader 和 FormData 這兩個物件和 JavaScript 處理二進位制的能力。 OK,Show cod
Android拍照,上傳,預覽綜合【修改】
最近需要做手機拍照【兩種方式:呼叫系統相機(部落格最後);自己寫照相機佈局】,預覽,上傳功能。特地研究了下android的手機拍照。 參考地址: http://blog.csdn.net/cfwdl/article/details/5746708 http://mjbb.iteye.co
android studio 小技巧之 圖片預覽
直接上圖 android studio 進過幾個小版本的更新 大版本已近來到了2.0 總體來說越來越好了,熟悉以後還是非常好用 , 比eclipse 好用的不是一點兩點 這次帶來 圖片預覽 右擊 drawable資料夾
如何Android studio 的佈局XML時預覽介面彈出的Rendering Problems?
如何Android studio 的佈局XML時預覽介面彈出的Rendering Problems? 問題圖預覽: 點選“Preview”預覽選單欄的“AppTheme”,從彈出的選單框中選