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);
  }
});

可以参考 http://stackoverflow.com/questions/10775942/android-sdk-get-raw-preview-camera-image-without-displaying-it?answertab=votes#tab-top

 

函数public void run() 的实现,这里用到了线程的等待,和唤醒操作。

wait(), notify();

之后就是绘制生成的bitmap

 

 

Sample0View 继承于 SampleViewBase。

主要用来生成bitmap。

 

 

我发现有一个问题,程序没有向camera传递数据,但是显示出来的是有图像的 而且一直在运动。

希望有大牛能为我解答一下。。  姑且认为这是camera类自有的显示图像。。

 

 

 

posted on 2012-09-18 14:10  HeeZee CG Blog  阅读(765)  评论(2编辑  收藏  举报