Camera笔记

来源:互联网 发布:python视频教程 知乎 编辑:程序博客网 时间:2024/06/07 00:15

/**

*taj_star

*/

目录
1.camera 和 video 到切换是咋样的?
2.闪光灯的模式切换。
3.camera 在何处 open
4.实现获取 拍摄完后的图片 和录像完之后的图片(也就是放在图片库中的图片)
5.前后摄像头的设置

6.Camera 是怎么编译的?

1.camera 和 video 到切换是咋样的?
ModePicker.changeToSelectedMode  ->Camera.onModeChanged->Camera.switchToOtherMode->MenuHelper.gotoMode

2.闪光灯的模式切换。
        mParameters = mCameraDevice.getParameters();
      if(mode == PreviewSetting.MODE_LIGHT_AUTO){
        
          mParameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
      }else if(mode == PreviewSetting.MODE_LIGHT_ON){
          mParameters.setFlashMode(Parameters.FLASH_MODE_ON);
      }else if(mode == PreviewSetting.MODE_LIGHT_OFF){
          mParameters.setFlashMode(Parameters.FLASH_MODE_OFF);
      }
      mCameraDevice.setParameters(mParameters);

3.camera 在何处 open
在camera.java 的onCreate中
getPreferredCameraId //获得cameraid
mCameraOpenThread.start();//用进程去开。

4.实现获取 拍摄完后的图片 和录像完之后的图片(也就是放在图片库中的图片)
  camera:
  在类JpegPictureCallback 中onPictureTaken 添加代码如下:
 //为什么放在onPictureTaken中呢,是因为这个函数中有jpegData(类型final byte[] data)这个参数,下面的转换参照Thumbnail.java 中的createThumbnail写的
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inSampleSize = 1;
  Bitmap bitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length, options);
  //旋转90度,因为拍下来是图片是横着的//这个待定
  Matrix matrix = new Matrix();
  matrix.setRotate(90);
  bitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true);
 mLastPicture.setImageBitmap(bitmap);
 mLastPicture.setScaleType(ScaleType.FIT_START);//从上面开始
 mLastPicture.setVisibility(View.VISIBLE);

 video:
  在onStopVideoRecording 中stopVideoRecording函数 (因为mCurrentVideoFilename在这个函数赋值的)下面添加:

// 这个转换是参照Thumbnail.createVideoThumbnail 写的
  Bitmap bitmap = null;
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {
                retriever.setDataSource(mCurrentVideoFilename);
                 bitmap = retriever.getFrameAtTime(-1);
        } catch (IllegalArgumentException ex) {
            // Assume this is a corrupt video file
        } catch (RuntimeException ex) {
            // Assume this is a corrupt video file.
        } finally {
            try {
                retriever.release();
            } catch (RuntimeException ex) {
                // Ignore failures while cleaning up.
            }
        }
        if (bitmap == null)
            return false;
       
        mLastVideo = (ImageView)findViewById(R.id.ic_last_pic_vid);
        mLastVideo.setImageBitmap(bitmap);
        mLastVideo.setScaleType(ScaleType.FIT_START);


5.前后摄像头的设置
    public boolean onCameraChanged(int mode) {
        // TODO Auto-generated method stub
        if (mCameraDevice != null) {
            mCameraDevice.stopPreview();
            mCameraDevice.release();
            mCameraDevice = null;
        }

        //face font
   /*     if(mode == 0){
            mCameraId = mFrontCameraId;
        }else if(mode == 1){
            mCameraId = mBackCameraId;
        }*/
        mCameraDevice = android.hardware.Camera.open(mCameraId);

        try {
            mCameraDevice.setPreviewDisplay(mSurfaceHolder);
        } catch (IOException exception) {
            mCameraDevice.release();
            mCameraDevice = null;
        }
        mParameters = mCameraDevice.getParameters();
        //requestLayout();
//      parameters.setPreviewSize(640, 480);
        mCameraDevice.setParameters(mParameters);      
       

        mCameraDevice.startPreview();
}
 

6.Camera 是怎么编译的?

   是在gallery2 中Android.mk 中会编译Gallery2 和Camera

原创粉丝点击