还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
智能__中的摄像头和普通__中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制,做一些有趣的应用譬如,画中画,做一些有用的应用譬如___识别,等等本讲打算通过一个实例,来介绍一下摄像头编程,相关解释都写在代码中了,请注意看代码注释 实例窈窈照相机,功能很简单,就是__程序弹出照相预览界面,__相机按钮完成照相功能,所照相片会存储在__存储卡根目录
1、创建一个项目Lesson36_Camera,主程序文件为__inActivity.j__a
2、Android__nifest.xml中设置屏幕为横屏,并且声明摄像头和存储卡的使用权限,具体代码如下 xmlversion=
1.0encoding=utf-8__nifestpackage=basic.android.lesson36xmlns:android=http://sche__s.android.com/apk/res/androidandroid:versioncode=1android:versionname=
1.0applicationandroid:label=@string/app_nameandroid:icon=@drawable/iconactivityandroid:label=@string/app_nameandroid:name=.__inActivityandroid:screenorientation=landscapeandroid:confi__hanges=orientation|keyboardHidden|keyboardintent-filter=actionandroid:name=android.intent.action.__INcategoryandroid:name=android.intent.category.LAUNCHER/category/action/intent/activity /applicationuses-sdk=android:minsdkversion=8uses-permission=android:name=android.permission.CAMERA/usesuses-permission=android:name=android.permission.WRITE_EXTERNAL_STORAGE/usesuses-feature=android:name=android.hardware.camera/usesuses-feature=android:name=android.hardware.camera.autofocus/uses/__nifest
3、本例中不需要布局文件__in.xml,因为本例中的UI组建都是动态添加上去的
4、最后__inActivity.j__a的代码如下 packagemyback.___.ablan___.com; importj__a.io.BufferedOutputStream;importj__a.io.File;importj__a.io.FileOutputStream;importj__a.io.IOEx__ption;importj__a.util.Calendar;importj__a.util.Locale; importandroid.app.Activity;importandroid.content.Context;importandroid.graphics.Bit__p;importandroid.graphics.Bit__pFactory;importandroid.graphics.PixelFor__t;importandroid.hardware.Camera;importandroid.os.Bundle;importandroid.text.for__t.DateFor__t;importandroid.util.Log;importandroid.view.KeyEvent;importandroid.view.Su_____Holder;importandroid.view.Su_____View;importandroid.view.Window;importandroid.view.Window__nager;importandroid.widget.FrameLayout;importandroid.widget.TextView;importandroid.widget.Toast; publicclass__inActivityextendsActivity{ privateCamer__iewcv;//准备一个相机对象privateCameramCamera=null;//准备一个Bit__p对象privateBit__pmBit__p=null; //准备一个保存__的PictureCallback对象publicCamera.PictureCallbackpictureCallback=newCamera.PictureCallback{ publicvoidonPictureTakenbyte[]dataCameracamera{Log.iyaoonPictureTaken;Toast.__keTextgetApplicationContext正在保存……Toast.LENGTH_LONG.show;//用Bit__pFactory.decodeByteArray方法可以把相机传回的裸数据转换成Bit__p对象mBit__p=Bit__pFactory.decodeByteArraydata0data.length;//接下来的工作就是把Bit__p保存成一个存储卡中的文件Filefile=newFile/sdcard/YY+newDateFor__t.for__tyyyyMMdd_hhmmssCalendar.getInstan__Locale.CHINA+.jpg;try{file.createNewFile;BufferedOutputStreamos=newBufferedOutputStreamnewFileOutputStreamfile;mBit__p.compressBit__p.CompressFor__t.PNG100os;os.flush;os.close;Toast.__keTextgetApplicationContext__保存完毕,在存储卡的根目录Toast.LENGTH_LONG.show;}catchIOEx__ptione{e.printStackTra__;}} }; //Activity的创建方法@OverridepublicvoidonCreateBundles__edInstan__State{super.onCreates__edInstan__State; //窗口去掉标题 requestWindowFeatureWindow.FEATURE_NO_TITLE; //窗口设置为全屏 getWindow.setFlagsWindow__nager.LayoutParams.FLAG_FULLSCREENWindow__nager.LayoutParams.FLAG_FULLSCREEN; //设置窗口为半透明 getWindow.setFor__tPixelFor__t.TRANSLU__NT; //提供一个帧布局 FrameLayout fl=newFrameLayoutthis; //创建一个照相预览用的Su_____View子类,并放在帧布局的底层 cv=newCamer__iewthis;fl.addViewcv; //创建一个文本框添加在帧布局中,我们可以看到,文字自动出现在了Su_____View的前面,由此你可以在预览窗口做出各种特殊效果TextViewtv=newTextViewthis;tv.setText请按\相机\按钮拍摄;fl.addViewtv; //设置Activity的根内容视图setContentViewfl; } //相机按键按下的__处理方法publicbooleanonKeyDownintkeyCodeKeyEventevent{Log.iyao__inActivity.onKeyDown;ifkeyCode==KeyEvent.KEYCODE_CAMERA{ifmCamera!=null{Log.iyaomCamera.takePicture;//当按下相机按钮时,执行相机对象的takePicture方法该方法有三个回调对象做入参,不需要的时候可以设nullmCamera.takePicturenullnullpictureCallback;}}returncv.onKeyDownkeyCodeevent;} //照相视图classCamer__iewextendsSu_____View{ privateSu_____Holderholder=null; //构造函数publicCamer__iewContextcontext{supercontext;Log.iyaoCamer__iew; //操作su_____的holderholder=this.getHolder;//创建Su_____Holder.Callback对象holder.addCallbacknewSu_____Holder.Callback{ @Overridepublicvoidsu_____DestroyedSu_____Holderholder{//停止预览mCamera.stopPreview;//释放相机资源并置空mCamera.release;mCamera=null;} @Overridepublicvoidsu_____CreatedSu_____Holderholder{//当预览视图创建的时候开启相机mCamera=Camera.open;try{//设置预览mCamera.setPreviewDisplayholder;}catchIOEx__ptione{//释放相机资源并置空mCamera.release;mCamera=null;} } //当su_____视图数据发生变化时,处理预览信息@Overridepublicvoidsu_____ChangedSu_____Holderholderintfor__tintwidthintheight{ //获得相机参数对象Camera.Parametersparameters=mCamera.getParameters;//设置格式parameters.setPictureFor__tPixelFor__t.JPEG;//设置预览大小,这里我的测试机是Milsstone所以设置的是854x480parameters.setPreviewSize854480;//设置自动对焦parameters.setFocu__odeauto;//设置__保存时的分辨率大小parameters.setPictureSize25921456;//给相机对象设置刚才设定的参数mCamera.setParametersparameters;//开始预览mCamera.startPreview;}};//设置Push缓冲类型,说明su_____数据由其他来源提供,而不是用自己的Canvas来绘图,在这里是由摄像头来提供数据holder.setTypeSu_____Holder.SU______TYPE_PUSH_BUFFERS;} } }
5、连接Milestone,编译并运行程序悲剧的是,截图只能看到黑黑的一片,无法截取到摄像头传输过来Su_____View信息,而在真机中是能看到预览效果的。