- 浏览: 249297 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
实现SurfaceHolder.Callback ,PictureCallback接口
预览service
/**
* 实例化按件
*/
private void findView() {
cameraView = (SurfaceView) this.findViewById(R.id.sfv_camera_view);
cameraView.setFocusable(true);
cameraView.setFocusableInTouchMode(true);
cameraView.setClickable(true);
cameraView.setOnClickListener(this);
surfaceHolder = cameraView.getHolder();
// 推送类型的surfaceView,缓冲区由Camera类来管理
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 设置回调函数
surfaceHolder.addCallback(this);
}
/***********************************************/
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 取得 camera对象
camera = Camera.open();
try {
// 设置camera对象的参数
// 设置camera对象采用纵向方向
Parameters parameters = camera.getParameters();
// 设置闪光灯模式
// 修改效果
// 列出常用效果:none mono negative sepia
// 类似的常量还有抗条带(antibanding) 闪光灯(flash mode)聚焦模式(focus mode)情景模式(scen
// mode) 白平衡(white balance)
List<String> colorEffects = parameters.getSupportedColorEffects();
Iterator<String> cei = colorEffects.iterator();
while (cei.hasNext()) {
String currentEffect = cei.next();
Log.i("tag", "checking:" + currentEffect);
// 使用过渡爆光
if (currentEffect.equals(Camera.Parameters.EFFECT_SOLARIZE)) {
Log.i("tag", "using SOLARIZE");
parameters.setColorEffect(Camera.Parameters.EFFECT_SOLARIZE);
break;
}
}
// 检查当前屏幕的方向
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
// 一个未文档化的特性
parameters.set("orientation", "portrait");
// 对于2.2以上的版本
camera.setDisplayOrientation(90);
} else {
parameters.set("orientation", "landscape");
camera.setDisplayOrientation(0);
}
// 设置预览大小,接近但不超过一对常量的大小
/* int bestWidth = 0;
int bestHeight = 0;
List<Size> previewSize = parameters.getSupportedPreviewSizes();
if (previewSize.size() > 1) {
Iterator<Size> iterator = previewSize.iterator();
while (iterator.hasNext()) {
Size cameraSize = iterator.next();
Log.i("tag", "checking:" + cameraSize.width + " x " + cameraSize.height);
if (cameraSize.width > bestWidth && cameraSize.width <= LARGEST_WIDTH && cameraSize.height > bestHeight && cameraSize.height <= LARGEST_HEIGHT) {
bestHeight = cameraSize.height;
bestWidth = cameraSize.width;
cameraView.setLayoutParams(new LinearLayout.LayoutParams(bestWidth, bestHeight));
}
}
}
if (bestHeight != 0 && bestWidth != 0) {
Log.i("tag", "Using :" + bestWidth + " x " + bestHeight);
parameters.setPreviewSize(bestWidth, bestHeight);
}*/
camera.setParameters(parameters);
// 设置预览
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
Log.i("tag", e.toString());
// 释放camera对象
camera.release();
}
// 启动摄像头预览
// 此时的预览图像会逆时针旋转90度,原因是camera对象假定方向是水平 或是横向模式
// 最简单的修复方法是使活动以横向模式显示
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
camera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 停止预览
camera.stopPreview();
// 释放camera对象
camera.release();
}
/**
* 捕获和保存图像PictureCallback
*
* 其他的回调方法
*
* 1 PreviewCallback 当存在预览帧时调用
*
* 三种使用方法:
*
* setPreviewCallback 在屏幕上显不一个新的预览帖时调用onPictureFream
*
* setOneShotPreviewCallback 当下预览图像可用时调用
*
* setPreviewCallbackWithBuffer 指定一个字节数组作为缓冲区,用于预览图像
*
* 2 AutoFocusCallback 完成一个自动聚焦是调用
*
* 3 ErrorCallback 发生一个错误时调用
*
* 4 OnZoomChangeListener 放大/缩小时调用
*
* 5 ShutterCallback 当捕获图像时调用
*
* @data 图像数据的字节数组
* @camera camera的对象引用
*/
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 保存相片
Uri imageFileUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
try {
OutputStream imageFileOS = getContentResolver().openOutputStream(imageFileUri);
imageFileOS.write(data);
imageFileOS.flush();
imageFileOS.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 可以理新元数据
ContentValues contentValues = new ContentValues(3);
contentValues.put(Media.DISPLAY_NAME, "this is a test title");
contentValues.put(Media.DESCRIPTION, "this is a test description");
getContentResolver().update(imageFileUri, contentValues, null, null);
}
/**
* 重写点击事件
*/
@Override
public void onClick(View v) {
camera.takePicture(null, null, this);
}
发表评论
-
android多媒体学习笔记一
2012-09-04 10:47 6951 使用内置的camera应用程序捕获图像 /*** ... -
android多媒体学习笔记三___图像合成
2012-09-05 11:36 593/** * 图像合成 * * @time 下午06:21 ... -
android多媒体部分学习笔记四___ Matrix
2012-09-05 11:40 687/*** 图像的缩放和旋转 Matrix** 1 0 0 x= ... -
android多媒体部分学习笔记五----audio
2012-09-08 16:08 681/*** 打开内置音乐播放器*/private void ge ... -
android多媒体部分学习笔记六----音频录制 mediaRecorder
2012-09-08 16:12 635/** * * 使用意图捕获音频 * * @time ... -
android多媒体部分学习笔记七------音频录制 mediaRecorder
2012-09-08 16:13 717/** * 自定义捕获音频 * * @time 下午12 ... -
android多媒体部分学习笔记八------音频录制 mediaRecorder
2012-09-08 16:14 732/** * 原始音频的播放和录制 * * audio ... -
android 多媒体部分学习笔记九----数字音频合成
2012-09-09 12:43 802/** * 数字音频合成 * * @time 下午12: ... -
android 多媒体部分学习笔记十 可视化频率(频谱)
2012-09-09 23:43 3180/** * 可视化频率 * * @time 下午12 ... -
android 多媒体部分学习笔记十--简单视频播放
2012-09-10 17:53 724/** * 简单播放 * * @time 下午05:15 ... -
android 多媒体部分学习笔记十二----mediaplay自定义播放器
2012-09-10 22:31 1605/** * * 自定义播放器 * * @time 下午 ... -
android 多媒体部分学习笔记十三----mediaStore 检索视频
2012-09-12 00:12 981/** * mediaStore检索视频 * * @ti ... -
android 多媒体部分学习十四---网络视频播放(http/rtsp)
2012-09-12 14:36 1813/** * 网络视频播放 * * openCore * ... -
android 多媒体部分学习笔记十五-----视频录制
2012-09-12 15:02 715/** * 调用系统视频录制 * * @time 下午0 ...
相关推荐
Android 开发学习笔记,学习android的好资料
Android学习笔记 Android学习笔记 Android学习笔记
Android学习笔记
Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) Android学习笔记(四)Android 中Activity页面的...
Android开发学习笔记(整理),整理论坛android学习笔记,较完整的讲解了android的内容。包括:view、activity、service、intent、广播机制、http连接、数据sqllite存储、后台线程、各种layout、偏好、本地文件操作、...
Android基础学习笔记,自己总结,适合初学者。
android入门学习笔记
Android_学习笔记 Android_学习笔记 Android_学习笔记
android 学习笔记(全全整理),吧android学习笔记全部整理下来了,可以去好好学习学习
第一行代码 android学习笔记 修改完整版
Android Animation学习笔记
学习java和android的笔记 更容易学习android 资深学习android 具有大量学习的笔记 很多的错误 都是从细节开始学习的
android 学习笔记 android 学习笔记 android 学习笔记
Android Intent 学习笔记
这是一个用android studio开发的小demo,只有一个TextView和一个Button,button实现了点击事件
android JNI 学习笔记 android JNI 学习笔记.doc
Android_学习笔记
Android+学习笔记,很实在的东西,没一句废话,第一手的学习笔记
android service 学习笔记(上、下)android service 学习笔记(上、下)