1加5和苹果手机5价格多少X哪个好

1297人阅读
android(32)
我们要调用摄像头的拍照功能,显然
第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码
&!-- 读取机器各种ID的权限 --&
&uses-permission
android:name="android.permission.READ_PHONE_STATE"
&!-- 在SDCard中创建与删除文件权限 --&
&uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
&!-- 往SDCard写入数据权限 --&
&uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
&!-- 关闭该包下的所有应用程序 --&
&uses-permission
android:name="android.permission.RESTART_PACKAGES"
&!-- 访问internet权限 --&
&uses-permission
android:name="android.permission.INTERNET" /&
&!-- 相机相关 --&
&uses-feature android:name="android.hardware.camera"
&uses-feature
android:name="android.hardware.camera.autofocus"
&uses-permission
android:name="android.permission.CAMERA" /&
&uses-permission
android:name="android.permission.RECORD_AUDIO"
&uses-feature
android:name="android.hardware.camera.flash"
第二步,要将摄像头捕获的图像实时地显示在手机上。
我们是用SurfaceView这个视图组件来实现的,因此在main.xml中加入下列代码
&&&&android:layout_width="fill_parent"&
&&&&android:layout_height="fill_parent"&
&&&&android:id="@+id/surfaceview"
第三步,设置窗口的显示方式
&&&&首先获得当前窗口&Window
window = getWindow();//得到窗口
&&&&接着设置没有标题&requestWindowFeature(Window.FEATURE_NO_TITLE);//没有标题
&&&&接着设置全屏&window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,&
&&&&&&&&WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
&&&&当然,我们在拍照过程中,屏幕必须一致处于高亮状态,因此接着加入下面代码
&&&window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//设置高亮
至此,我们将窗口的显示方式规定死了,然后才能设置窗口上显示的组件(顺序非常重要)
&setContentView(R.layout.main);
第四步,设置SurficeView显示控件的属性
&&&找到surficeView
&&&surfaceView
= (SurfaceView) findViewById(R.id.surfaceview);
&&&设置它的像素为800x600
&&&surfaceView.getHolder().setFixedSize(800,
&&//下面设置surfaceView不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
&&&&&&&&surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
第五步,就是为surficeView加入回调方法(callBack)
surfaceView.getHolder().addCallback(new SurfaceCallback());
上面的回调类是我们自己定义的,代码如下
private class SurfaceCallback
implements SurfaceHolder.Callback{
public void
surfaceCreated(SurfaceHolder holder) {
Camera.open();//打开硬件摄像头,这里导包得时候一定要注意是android.hardware.Camera
WindowManager wm = (WindowManager)
getSystemService(Context.WINDOW_SERVICE);//得到窗口管理器
Display display
wm.getDefaultDisplay();//得到当前屏幕
Camera.Parameters parameters =
camera.getParameters();//得到摄像头的参数
parameters.setPreviewSize(display.getWidth(),
display.getHeight());//设置预览照片的大小
parameters.setPreviewFrameRate(3);//设置每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的格式
parameters.setJpegQuality(85);//设置照片的质量
parameters.setPictureSize(display.getHeight(),
display.getWidth());//设置照片的大小,默认是和
&&&&屏幕一样大
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
camera.startPreview();//开始预览
isPreview =
//设置是否预览参数为真,在类最上层定义public boolean isPreview =
然后在此处赋值。
} catch (IOException e) {
Log.e(TAG, e.toString());
public void
surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method
&&&&&&&&&&&&&&&
public void
surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null){
if(isPreview){//如果正在预览&
camera.stopPreview();
camera.release();
第六步,我们必须对按键事件进行监听,如是拍照还是聚焦,代码如下
public boolean onKeyDown(int
keyCode, KeyEvent event) {//处理按键事件
if(camera!=null&&event.getRepeatCount()==0)//代表只按了一下
switch(keyCode){
KeyEvent.KEYCODE_BACK://如果是搜索键
&&&&&camera.autoFocus(null);//自动对焦
KeyEvent.KEYCODE_DPAD_CENTER://如果是中间键
&&&&&camera.takePicture(null,
TakePictureCallback());//将拍到的照片给第三个对象中,这里的TakePictureCallback()是自己定义的,在下面的代码中
//阻止事件往下传递,否则按搜索键会变成系统默认的
------------------------------------------------------------------------------------------
private final class
TakePictureCallback implements PictureCallback{
public void onPictureTaken(byte[]
data, Camera camera) {
Bitmap bitmap =
BitmapFactory.decodeByteArray(data, 0, data.length);
File file = new
File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream outputStream = new
FileOutputStream(file);
press(CompressFormat.JPEG,
100, outputStream);
outputStream.close();
camera.stopPreview();
camera.startPreview();//处理完数据之后可以预览
} catch (Exception e) {
Log.e(TAG, e.toString());
注意,代码中有两个回调类,一个是SurfaceCallback(),另外一个是TakePictureCallback(),初学者可能一时难以理
解,通俗地讲,前者是用来监视surficeView这个暂时存放图片数据的显示控件的,根据它的显示情况调用不同的方法,包括
surfaceCreated(),surfaceChanged(),surfaceDestroyed(),也就不难理解为什么会有这三个回调方法了
(注意,在surfaceDestroyed()方法中必须释放摄像头,详细代码参见上方)。TakePictureCallback()是为了监视是否
拍照而设计的接口,期中也仅有一个方法,camera将拍照得到的数据传入方法,我们便可以对拍照得到的数据进行进一步处理了。
至此,简单的拍照功能介绍完毕!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43275次
积分:1374
积分:1374
排名:千里之外
原创:97篇
(1)(1)(95)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
android调用手机摄像头拍照
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口html5摄像头 如何调用手机摄像头
1)获取视频流添加一个HTML5的Video标签,并将从摄像头获得视频作为这个标签的输入来源var video = document.getElementByIdx_x_x("video"); navigator.getUserMedia({video:true}, function (stream) {
video.src = window.webkitURL.createObjectURL(stream);
}, function (error) { alert(error); });2)拍照关于拍照功能,采用HTML5的Canvas实时捕获Video标签的内容,Video元素能作为Canvas图像的输入
function scamera() {
var videoElement = document.getElementByIdx_x_x('video');
var canvasObj = document.getElementByIdx_x_x('canvas1');
var context1 = canvasObj.getContext('2d');
context1.fillStyle = "#ffffff";
context1.fillRect(0, 0, 320, 240);
context1.drawImage(videoElement, 0, 0, 320, 240);
}3)图片获取要从Canvas获取图片数据,其核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像var imgData=canvas.toDataURL(“image/png”);imgData格式如下:”data:image/base64,xxxxx“真正图像数据是base64编码逗号之后的部分转载,仅供参考。
已被提问者采纳
你还没有登录,请先登录或注册慕课网帐号
58248人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2

我要回帖

更多关于 苹果5价格官网 的文章

 

随机推荐