UIImagePickerController拍照与摄像

iOS UIImagePickerController轻松调用相机详细介绍 当我们需要调用相机时,通常有两个方案,一是使用系统定制UI的UIImagePickerController,二是使用可以自定义UI的AVCaptureSession。 如果我们不要求自定义UI则可以直接使用UIImagePickerController,可以节省时间。 @interface UIImagePickerController : UINavigationController 我... 阅读详情
该类继承自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年 gaowuhang. 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年 gaowuhang. All rights reserved.

//


#import "ViewController.h"

#import

#import


@interface ViewController()


@end


@implementationViewController



- (IBAction)takePictureButtonClick:(id)sender{

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

   if(![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){

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

      return;

    }

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

   NSArray*availableMediaTypes = [UIImagePickerControlleravailableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

   BOOL canTakePicture = NO;

   for (NSString* mediaTypein availableMediaTypes) {

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

          //支持拍照

          canTakePicture =YES;

          break;

       }

    }

  //检查是否支持拍照

   if (!canTakePicture) {

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

      return;

    }

  //创建图像选取控制器

   UIImagePickerController* imagePickerController =[[UIImagePickerControlleralloc]init];

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

   imagePickerController.sourceType=UIImagePickerControllerSourceTypeCamera;

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

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

  //允许用户进行编辑

   imagePickerController.allowsEditing =YES;

   //设置委托对象

   imagePickerController.delegate=self;

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

   [selfpresentModalViewController:imagePickerController animated:YES];

    [imagePickerControllerrelease];

}


- (IBAction)captureVideoButtonClick:(id)sender{

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

   if(![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){

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

      return;

    }

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

   NSArray*availableMediaTypes = [UIImagePickerControlleravailableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

   BOOL canTakeVideo = NO;

   for (NSString* mediaTypein availableMediaTypes) {

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

          //支持摄像

          canTakeVideo =YES;

          break;

       }

    }

  //检查是否支持摄像

   if (!canTakeVideo) {

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

      return;

    }

  //创建图像选取控制器

   UIImagePickerController* imagePickerController =[[UIImagePickerControlleralloc]init];

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

   imagePickerController.sourceType=UIImagePickerControllerSourceTypeCamera;

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

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

  //设置摄像图像品质

   imagePickerController.videoQuality=UIImagePickerControllerQualityTypeHigh;

  //设置最长摄像时间

   imagePickerController.videoMaximumDuration =30;

  //允许用户进行编辑

   imagePickerController.allowsEditing =YES;

   //设置委托对象

   imagePickerController.delegate=self;

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

   [selfpresentModalViewController:imagePickerController animated:YES];

    [imagePickerControllerrelease];

    

}


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

   if (!error) {

       NSLog(@"picture saved with noerror.");

    }

   else

    {

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

    }

}


- (void)imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info{

  //打印出字典中的内容

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

   //获取媒体类型

   NSString*mediaType = [infoobjectForKey:UIImagePickerControllerMediaType];

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

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

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

   UIImage*editedImage = [infoobjectForKey:UIImagePickerControllerEditedImage];

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

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

    }elseif([mediaType isEqualToString:(NSString *)kUTTypeMovie])

                           {

                              //获取视频文件的url

                              NSURL* mediaURL = [infoobjectForKey:UIImagePickerControllerMediaURL];

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

                              ALAssetsLibrary* assetsLibrary= [[ALAssetsLibraryalloc]init];

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

                                 if (!error) {

                                    NSLog(@"captured video saved with noerror.");

                                  }else

                                  {

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

                                  }

                               }];

                              [assetsLibraryrelease];

                           }

                           [pickerdismissModalViewControllerAnimated:YES];

    

}


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

   [picker dismissModalViewControllerAnimated:YES];

}

                           

- (void)viewDidLoad

{

   [superviewDidLoad];

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

}


- (void)viewDidUnload

{

   [superviewDidUnload];

   // Release any retained subviews of themain view.

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

   return(interfaceOrientation !=UIInterfaceOrientationPortraitUpsideDown);

}


@end

自定义UIImagePickerController的拍照页面 NULL 博文链接:https://eric-gao.iteye.com/blog/1722533 立即下载

相关推荐

IOS UIImagePickerController

IOS UIImagePickerController调用,包括打开相机以及打开图库,录像,以及将录像导出

UIImagePickerController 图像选取器--在iPhone中调用照相机、照片库

UIImagePickerController 图像选取器是一种导航控制器类,让你可以在应用程序中添加简单的图像选择功能或者照相机界面。用户会看到一个图像选择屏幕,在其中挑选相片,相片的来源则是他自己的相片库、保存下来的相片集或者照相机。当用户选定一个相片后,就会通过 UIImagePickerDelegate 协议中的方法,通知选取器的委托。 你可以用  UIImagePickerCont

辰风的专栏 681

UIImagePickerController的使用

UIImagePickerController使用实例,使用照相功能,涉及的到UIImageView的使用,调用Iphone相册,通讯录等功能

iOS 系统提供的媒体资源选择器(UIImagePickerController)

图片或者视频的选择功能几乎是每个APP必不可少的,是 iOS 系统提供的一个方便的媒体选择器,允许用户从照片库中选择图片或视频,或者使用相机拍摄新照片和视频。它的页面简单易用,代码稳定可靠,适合用于单张图片或者视频的选择场景。UIImagePickerController也为我们保留了一些可以自定义相机样式的空间。通过设置showsCameraControls属性为false。隐藏系统为我们提供的相机页面样式。效果如下:// 拍照// 录像// 停止录像// 设置相机模式。

weixin_39339407的博客 3026

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼调试 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感谢K大。能引用K大的成果也是自己的荣幸,不便之处还请K大多多包涵,在此引用只是为方便自己日常学习,部分参数表里根据自身情况,增加了相应参数。 1.安装及下载Ardupilot官方固件: VTOL固件的来源可分为Ardupilot官方固...

u011322358的博客 3万+

25个Prompt去除AI味,让AI写作更像真人

自然语言生成技术飞速发展,如今AI写作已经深度融入内容创作、营销运营和日常办公。但许多用户发现,AI生成的文本常常带着一股“AI味”——句子过于工整、过度总结、细节空洞,导致内容被一眼识破,甚至面临“AI率”过高的尴尬。其实,这种塑料感源于大模型的训练数据与对齐机制,它偏好生成结构完整、逻辑平滑的“安全文本”。要解决这一问题,核心不在于更换工具或复杂调参,而在于掌握提示词工程的底层逻辑:通过限制结构、注入细节、切换视角、打乱顺序等具体指令,引导模型生成更接近人类表达习惯的文本。本文基于实战经验,提供25个可

weixin_26824299的博客 258

[iOS]UIViewController+Present

Demo:https://download.csdn.net/download/u012881779/11950564 UIViewController+Present这个分类,用来适配iOS13之后UIViewController模态弹出问题. 使用这种方式就不用去项目中挨个找写模态弹出的地方. - (IBAction)tapButtonAction:(id)sender { UIB...

Gamin 894

专治疑难系列 - 解决打印机凭证冲突问题

一、问题描述 二、解决方法 三、问题已解决

Passerby_Wang的博客 2万+

iOS-UIImagePickerController拍照与摄像

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

花若盛开,蝴蝶自来! 667

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

基于qiime2的16s测序数据分析分析激活qiime环境我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可/bin/bash# 设置目录路径# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"# 遍历_R1和_R2文件do # 检查R1文件是否存在then# 获取样本ID(去掉_R1.fastq.gz)

2301_76771985的博客 5515

px3 有感分析

px3 后续分析

qq_39707917的博客 3114

摄像头 UIImagePickerController拍照和视频录制

下面看一下在iOS如何拍照和录制视频。在iOS中要拍照和录制视频最简单的方法就是使用UIImagePickerController。UIImagePickerController继承于UINavigationController,前面的文章中主要使用它来选取照片,其实UIImagePickerController的功能不仅如此,它还可以用来拍照和录制视频。首先看一下这个类常用的属性和方法:

李聪的博客 4952

通达信股本变迁文件(gbbq)解密方法

近年来A股市场跌宕起伏真特么精彩,本人愚钝,被整爆仓,损失惨重 痛定思痛,认为交易这种对纪律要求极高,且必须完全排除情绪影响的勾当,还是应该交给程序来干 数据哪里来呢?当然是拿来主义。。。问券商的交易软件要呗 到处查资料,得知通达信的权息文件数据齐全,不仅含有除权除息数据,还含有限售解禁、增发、可转债上市等股本变化数据 ——这对于某些对成交量变化敏感的交易模型是非常重要的

不甘碌碌老,结庐铸宝刀 2万+

iOS UIImagePickerController拍照与摄像

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

weixin_30672019的博客 107

红外与可见光融合避坑指南:LLVIP数据集实测6大算法效果对比

本文基于专为弱光视觉设计的LLVIP数据集,对GTF、DenseFuse、FusionGAN、IFCNN等6种主流红外与可见光图像融合算法进行了深度实测与对比。通过客观指标与可视化分析,揭示了算法在极端弱光下易出现特征丢失的共性问题,并探讨了融合图像对下游目标检测任务的实际增益,为工程选型与算法调优提供了实用指南。

weixin_29092031的博客 439

19、利用PostGIS进行空间分析:更高效的矢量分析方法

本文介绍了如何利用PostGIS进行高效灵活的矢量空间分析,重点探讨了在选址安静住宅场景中使用缓冲区和距离测量两种方法的实现与优化。通过QGIS与PostGIS结合,演示了数据上传、CTE应用、ST_Intersects与ST_Distance函数对比,并深入分析了横向子查询在提升查询性能和代码可读性方面的优势。文章还比较了不同方法的适用场景,并以房地产开发选址为例展示了完整分析流程,最后总结了PostGIS在空间分析中的强大能力与未来应用前景。

d3e4f的博客 92

UIImagePickerController拍照与摄像(转)

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

weixin_33816611的博客 83

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: ios中陀螺仪CoreMotion的使用
下一篇: UDID替代方案
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值