Android 照相机的实例应用
发布时间 - 2026-01-11 03:02:08 点击率:次Android 照相机的实例应用

关键技术:
SurfaceHolder.Callback
public class MyCameraDemo extends Activity {
private SurfaceView surface = null ;
private Button but = null ;
private SurfaceHolder holder = null ;
private Camera cam = null ;
private boolean previewRunning = true ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.but = (Button) super.findViewById(R.id.but) ;
this.surface = (SurfaceView) super.findViewById(R.id.surface) ;
this.holder = this.surface.getHolder() ;
this.holder.addCallback(new MySurfaceViewCallback()) ;
//设置缓冲类型
this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) ;
//设置分辨率
this.holder.setFixedSize(600, 350);
this.but.setOnClickListener(new OnClickListenerImpl()) ;
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
if(MyCameraDemo.this.cam != null) {
//自动对焦
MyCameraDemo.this.cam.autoFocus(new AutoFocusCallbackImpl()) ;
}
}
}
private class MySurfaceViewCallback implements SurfaceHolder.Callback {
//当预览界面格式大小改变时,调用
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
//初次实例化界面调用
public void surfaceCreated(SurfaceHolder holder) {
MyCameraDemo.this.cam = Camera.open(0) ; // 取得第一个摄像头
//窗口服务
WindowManager manager = (WindowManager) MyCameraDemo.this
.getSystemService(Context.WINDOW_SERVICE);
//取得display显示对象
Display display = manager.getDefaultDisplay() ;
//照相机参数
Parameters param = MyCameraDemo.this.cam.getParameters() ;
//将照相机预览大小设置为display大小
param.setPreviewSize(display.getWidth(), display.getHeight()) ;
param.setPreviewFrameRate(5) ; // 一秒5帧
param.setPictureFormat(PixelFormat.JPEG) ; // 图片形式
param.set("jpen-quality", 80) ;//图片质量,最高100
MyCameraDemo.this.cam.setParameters(param) ;
try {
MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder) ;
} catch (IOException e) {
}
MyCameraDemo.this.cam.startPreview() ; // 进行预览
MyCameraDemo.this.previewRunning = true ; // 已经开始预览
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(MyCameraDemo.this.cam != null) {
if(MyCameraDemo.this.previewRunning) {
MyCameraDemo.this.cam.stopPreview() ; // 停止预览
MyCameraDemo.this.previewRunning = false ;
}
MyCameraDemo.this.cam.release() ;
}
}
}
private class AutoFocusCallbackImpl implements AutoFocusCallback {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success) { // 成功
MyCameraDemo.this.cam.takePicture(sc, pc, jpgcall) ;
}
}
}
private PictureCallback jpgcall = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) { // 保存图片的操作
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
String fileName = Environment.getExternalStorageDirectory()
.toString()
+ File.separator
+ "mldnphoto"
+ File.separator
+ "MLDN_" + System.currentTimeMillis() + ".jpg";
File file = new File(fileName) ;
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs() ; // 创建文件夹
}
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)) ;
bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos) ; // 向缓冲区之中压缩图片
bos.flush() ;
bos.close() ;
Toast.makeText(MyCameraDemo.this,
"拍照成功,照片已保存在" + fileName + "文件之中!", Toast.LENGTH_SHORT)
.show();
} catch (Exception e) {
Toast.makeText(MyCameraDemo.this,
"拍照失败!", Toast.LENGTH_SHORT)
.show();
}
MyCameraDemo.this.cam.stopPreview() ;
MyCameraDemo.this.cam.startPreview() ;
}
} ;
private ShutterCallback sc = new ShutterCallback(){
@Override
public void onShutter() {
// 按下快门之后进行的操作
}
} ;
private PictureCallback pc = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
}
} ;
}
主布局函数
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/but"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="照相" />
<SurfaceView
android:id="@+id/surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
以上就是Android 相机的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Android自定义listview布局实现上拉加载下拉刷新功能
在centOS 7安装mysql 5.7的详细教程
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel如何集成Inertia.js与Vue/React?(安装配置)
JS实现鼠标移上去显示图片或微信二维码
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Android中AutoCompleteTextView自动提示
简历在线制作网站免费版,如何创建个人简历?
利用python获取某年中每个月的第一天和最后一天
高防服务器:AI智能防御DDoS攻击与数据安全保障
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
如何在云主机上快速搭建网站?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
b2c电商网站制作流程,b2c水平综合的电商平台?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
python中快速进行多个字符替换的方法小结
浅谈javascript alert和confirm的美化
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
网站优化排名时,需要考虑哪些问题呢?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
晋江文学城电脑版官网 晋江文学城网页版直接进入
如何快速启动建站代理加盟业务?
如何正确下载安装西数主机建站助手?
EditPlus 正则表达式 实战(3)
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel如何使用.env文件管理环境变量?(最佳实践)
Python文件操作最佳实践_稳定性说明【指导】
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何在IIS中配置站点IP、端口及主机头?
如何在建站宝盒中设置产品搜索功能?
如何快速生成专业多端适配建站电话?
详解Android中Activity的四大启动模式实验简述
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
网站制作企业,网站的banner和导航栏是指什么?
C++时间戳转换成日期时间的步骤和示例代码
大型企业网站制作流程,做网站需要注册公司吗?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何快速配置高效服务器建站软件?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件

