/**
*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