Tutorial0是一个纯粹的android程序,没有opencv部分,是其他程序的框架基础。
有Sample0Base.java, Sample0View.java, SampleViewBase.java.三个文件。
Sample0Base 是程序入口,主要设置surfaceview和菜单。
requestWindowFeature(Window.FEATURE_NO_TITLE);
mView = new Sample0View(this);
setContentView(mView);
SampleViewBase 是继承于 SurfaceView,interface runnable。
主要控制camera的设置以及调用,画面的绘制。
重要在于:
mCamera.setPreviewTexture( new SurfaceTexture(10) );//隐藏原始数据
mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() {//这里数据回调之后,copy到mFrame中,再到processFrame里进行处理 生成bitmap
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (SampleViewBase.this) {
if(mCopyOnce){
mCopyOnce = false;
System.arraycopy(data, 0, mFrame, 0, data.length);
//Log.i(TAG,"data.length = "+data.length);
}
SampleViewBase.this.notify();
}
//Log.i(TAG, "copy mFrame data");
camera.addCallbackBuffer(mBuffer);
}
});
函数public void run() 的实现,这里用到了线程的等待,和唤醒操作。
wait(), notify();
之后就是绘制生成的bitmap
Sample0View 继承于 SampleViewBase。
主要用来生成bitmap。
我发现有一个问题,程序没有向camera传递数据,但是显示出来的是有图像的 而且一直在运动。
希望有大牛能为我解答一下。。 姑且认为这是camera类自有的显示图像。。