转载自:http://blog.sina.com.cn/s/blog_68edaff101019ppe.html

(2012-11-23 14:38:40)

标签:

ios

iphone

拍照

摄像

杂谈

 
该类继承自UINavigationController类

步骤:
检查媒体来源模式是否可用
检查该来源模式下所支持的媒体类型
创建图像选取控制器,设置其属性并显示
在委托协议方法中处理
1.检查媒体来源
调用UIImagePickerController类的静态方法isSourceTypeAvailable来检查
sourceType是一个UIImagePickerControllerSourceType类型的枚举值,它表示图像选取控制器的3种不同的媒体来源模式
UIImagePickerControllerSourceTypePhotoLibrary:照片库模式。图像选取控制器以该模式显示时会浏览系统照片库的根目录。
UIImagePickerControllerSourceTypeCamera:相机模式,图像选取控制器以该模式显示时可以进行拍照或摄像。
UIImagePickerControllerSourceTypeSavedPhotosAlbum:相机胶卷模式,图像选取控制器以该模式显示时会浏览相机胶卷目录。
如果设备支持指定的媒体来源模式,则isSourceTypeAvailable:方法返回YES,否则返回NO。
2.检查支持的媒体类型
调用UIImagePickerController类的另一个静态方法 availableMediaTypesForSourceType:
返回的是字符串数组,kUTTypeImage表示静态图片,kUTTypeMovie表示视频。这两个字符串常量定义在MobileCoreServices框架中。
 
参数info是一个字典,包含媒体类型,拍照的原始图片,编辑后的图片,或是摄像的视频文件的URL等。

//

//  ViewController.h

//  Camera

//

//  Created by gao wuhang on 12-11-23.

//  Copyright (c) 2012年 gao wuhang. All rights reserved.

//

#import

@interface ViewController : UIViewController<</span>UINavigationControllerDelegate,UIImagePickerControllerDelegate>

- (IBAction)takePictureButtonClick:(id)sender;

- (IBAction)captureVideoButtonClick:(id)sender;

@end

//

//  ViewController.m

//  Camera

//

//  Created by gao wuhang on 12-11-23.

//  Copyright (c) 2012年 gao wuhang. All rights reserved.

//

#import "ViewController.h"

#import

#import

@interface ViewController ()

@end

@implementation ViewController

- (IBAction)takePictureButtonClick:(id)sender{

//检查相机模式是否可用

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

NSLog(@"sorry, no camera or camera is unavailable.");

return;

}

//获得相机模式下支持的媒体类型

NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

BOOL canTakePicture = NO;

for (NSString* mediaType in availableMediaTypes) {

if ([mediaType isEqualToString:(NSString*)kUTTypeImage]) {

//支持拍照

canTakePicture = YES;

break;

}

}

//检查是否支持拍照

if (!canTakePicture) {

NSLog(@"sorry, taking picture is not supported.");

return;

}

//创建图像选取控制器

UIImagePickerController* imagePickerController = [[UIImagePickerController alloc] init];

//设置图像选取控制器的来源模式为相机模式

imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

//设置图像选取控制器的类型为静态图像

imagePickerController.mediaTypes = [[[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil]autorelease];

//允许用户进行编辑

imagePickerController.allowsEditing = YES;

//设置委托对象

imagePickerController.delegate = self;

//以模视图控制器的形式显示

[self presentModalViewController:imagePickerController animated:YES];

[imagePickerController release];

}

- (IBAction)captureVideoButtonClick:(id)sender{

//检查相机模式是否可用

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

NSLog(@"sorry, no camera or camera is unavailable!!!");

return;

}

//获得相机模式下支持的媒体类型

NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

BOOL canTakeVideo = NO;

for (NSString* mediaType in availableMediaTypes) {

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {

//支持摄像

canTakeVideo = YES;

break;

}

}

//检查是否支持摄像

if (!canTakeVideo) {

NSLog(@"sorry, capturing video is not supported.!!!");

return;

}

//创建图像选取控制器

UIImagePickerController* imagePickerController = [[UIImagePickerController alloc] init];

//设置图像选取控制器的来源模式为相机模式

imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

//设置图像选取控制器的类型为动态图像

imagePickerController.mediaTypes = [[[NSArray alloc] initWithObjects:(NSString*)kUTTypeMovie, nil]autorelease];

//设置摄像图像品质

imagePickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;

//设置最长摄像时间

imagePickerController.videoMaximumDuration = 30;

//允许用户进行编辑

imagePickerController.allowsEditing = YES;

//设置委托对象

imagePickerController.delegate = self;

//以模式视图控制器的形式显示

[self presentModalViewController:imagePickerController animated:YES];

[imagePickerController release];

}

- (void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo{

if (!error) {

NSLog(@"picture saved with no error.");

}

else

{

NSLog(@"error occured while saving the picture%@", error);

}

}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

//打印出字典中的内容

NSLog(@"get the media info: %@", info);

//获取媒体类型

NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];

//判断是静态图像还是视频

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {

//获取用户编辑之后的图像

UIImage* editedImage = [info objectForKey:UIImagePickerControllerEditedImage];

//将该图像保存到媒体库中

UIImageWriteToSavedPhotosAlbum(editedImage, self,@selector(image:didFinishSavingWithError:contextInfo:), NULL);

}else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])

{

//获取视频文件的url

NSURL* mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];

//创建ALAssetsLibrary对象并将视频保存到媒体库

ALAssetsLibrary* assetsLibrary = [[ALAssetsLibrary alloc] init];

[assetsLibrary writeVideoAtPathToSavedPhotosAlbum:mediaURLcompletionBlock:^(NSURL *assetURL, NSError *error) {

if (!error) {

NSLog(@"captured video saved with no error.");

}else

{

NSLog(@"error occured while saving the video:%@", error);

}

}];

[assetsLibrary release];

}

[picker dismissModalViewControllerAnimated:YES];

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

[picker dismissModalViewControllerAnimated:YES];

}

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

- (void)viewDidUnload

{

[super viewDidUnload];

// Release any retained subviews of the main view.

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

@end

参考:http://blog.csdn.net/pucker

转载于:https://www.cnblogs.com/lingzeng/p/3935217.html

UIImagePickerController拍照与摄像(转)相关推荐

  1. UIImagePickerController拍照与摄像

    该类继承自UINavigationController类 步骤: 检查媒体来源模式是否可用 检查该来源模式下所支持的媒体类型 创建图像选取控制器,设置其属性并显示 在委托协议方法中处理 1.检查媒体来 ...

  2. Android--调用系统照相机拍照与摄像

    https://www.cnblogs.com/plokmju/p/Android_SystemCamera.html 前言 在很多场景中,都需要用到摄像头去拍摄照片或视频,在照片或视频的基础之上进行 ...

  3. HTML5+JavaScript调用摄像头拍照或者摄像

    调用摄像头拍照或者摄像有多种方法,之前介绍过两种: HTML5 <input type="file">标签直接调用:https://blog.csdn.net/qq_2 ...

  4. h5前端调用android拍照功能,H5调用Android拍照和摄像以及选取相册

    之前一直认为H5调用Android,H5不需要Android配合能直接实现功能.前段时间,自己做这个功能,才发现不是这么回事. H5编写 html文件里只需要标签即可实现代码,代码如下所示: 拍照 ο ...

  5. 微信小程序摄像头监控_微信小程序拍照和摄像功能实现方法示例

    本文实例讲述了微信小程序拍照和摄像功能实现方法.分享给大家供大家参考,具体如下: 拍照 原先的想法是使用微信的camera组件来实现,并且模拟发朋友圈的样子来进行相机的设置,其实就是将camera组件 ...

  6. 调用Camera API实现自己的拍照和摄像程序

    参考博客: http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html 根据Camera API实现自己的拍照和摄像程序 通过上 ...

  7. 微信小程序拍照和摄像功能实现方法示例

    微信小程序拍照和摄像功能实现方法示例:本文实例讲述了微信小程序拍照和摄像功能实现方法.分享给大家供大家参考,具体如下: 微信小程序拍照功能实现逻辑和实例代码: 原先的想法是使用微信的camera组件来 ...

  8. 摄像头 UIImagePickerController拍照和视频录制

    下面看一下在iOS如何拍照和录制视频.在iOS中要拍照和录制视频最简单的方法就是使用UIImagePickerController.UIImagePickerController继承于UINaviga ...

  9. Android初级教程调用手机拍照与摄像功能

    这个小案例建议在手机上运行. package com.example.camera;import java.io.File;import android.net.Uri; import android ...

  10. 从0开始认识android(六):启动系统相机拍照、摄像的Intent

    1.启动系统相机 1.1.只是简单的获取所拍照片的缩略图 启动相机 static final int REQUEST_IMAGE_CAPTURE = 1;private void dispatchTa ...

最新文章

  1. ptrace原理与性能对比
  2. sql 数组三 展平数组
  3. vscode中怎样格式化js代码_[VSCode插件推荐] Bracket Pair Colorizer: 为代码中的括号添上一抹亮色...
  4. php 输出mysql_php如何输出mysql查询结果
  5. JavaSE基础——Object类中的常用方法
  6. 自定义Kettle数据库插件 1
  7. 【现控】系统状态空间表达式
  8. 第1关:身份证归属地查询
  9. 计算机职业适应性测试题库,职业适应性测试题库 一、性格职业适应度测试.doc...
  10. 简单投资组合净值的计算
  11. win10将HTML动态做桌面壁纸,用win10自带工具,win10专业版简易制作动态壁纸教程...
  12. 如何成为一名合格的Apache项目Committer,参与Apache开源贡献的正确姿势
  13. Java中的String为什么是不可变的?
  14. Mento Carlo方法
  15. android sd卡列目录文件_(科普)详解Android系统SD卡各类文件夹名称
  16. 日复一日 - C++ (设计符合下述要求的日期类(Date))新人
  17. 苹果(MacOS)桌面应用程序 签名及分发教程
  18. 【Unity】Unity3D快捷键
  19. serverSocket详解
  20. 三种最小生成树算法的简要比较:Kruskal算法, 破圈法(管梅谷), Prim算法

热门文章

  1. LINUX yum 服务
  2. idp 苹果开发账号续费
  3. 马云:成功与情商有关 与读书多少关系不大
  4. lanmp_wdcp_v2.4快速安装RPM包发布
  5. XSRF(XSS+CSRF)
  6. 容器已成运维必备能力,你知道它是如何出现的吗?
  7. android获取根视图
  8. [iOS]学习笔记3(动态性)
  9. 一笔期货成交的始末(可能有问题)
  10. php的public、protected、private三种访问控制模式的区别