IOS系统照相机的调用

IOS开发调用系统相机和打开闪光灯
 
     今天给大家分享一下如何调用iphone的拍照功能和打开闪光灯,有些代码我也不太理解,很多是在网上借鉴其他人的。IOS有两种的拍照和视频的方式:1.直接使用UIImagePickerController,这个类提供了一个简单便捷的拍照与选择图片库里图片的功能。2.另一种是通过AVFoundation.framework框架完全自定义拍照的界面和选择图片库界面。我只做了第一种,就先给大家介绍第一种做法:
一、首先调用接口前,我们需要先判断当前设备是否支持UIImagePickerController,用isSourceTypeAvailable:来判断是否可用
二、查看符合的媒体类型,这个时候我们调用availableMediaTypeForSou rceType:判断
在调用UIImagePickerController时我们需要加入他的两个代理方法:
UINavigationControllerDe legate和UIImagePickerControllerD elegate,在调用摄像头的时候还可以调闪光灯,一会代码里有。
要调用闪光灯需要先建一个AVCaptureSession类的实例对象:
//
//   Created by Mason on 13-1-23.
//   Copyright (c) 2013年 Mason. All rights reserved.
//
 
#import
//调用闪光灯调用框架
#import
 
@interface CameraViewController : UIViewController
{
       AVCaptureSession * _AVSession;//调用闪光灯的时候创建的类
}
 
@property(nonatomic,retain)AVCaptureSession * AVSession;
 
@end
在.m的- (void)viewDidLoad里建立4Button,Camera调用相机、Library调用图片库、flashlight打开闪光灯、close关闭闪光灯
//打开相机
-(void)addCarema
{
       //判断是否可以打开相机,模拟器此功能无法使用
       if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerS ourceTypeCamera]) {
                
               UIImagePickerController * picker = [[UIImagePickerController alloc]init];
               picker.delegate = self;
               picker.allowsEditing = YES;   //是否可编辑
               //摄像头
               picker.sourceType = UIImagePickerControllerS ourceTypeCamera;
               [self presentModalViewControll er:picker animated:YES];
               [picker release];
       }else{
               //如果没有提示用户
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你没有摄像头" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];
               [alert show];
       }
}
打开相机后,然后需要调用UIImagePickerControllerD elegate里的方法,拍摄完成后执行的方法和点击Cancel之后执行的方法:
//拍摄完成后要执行的方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWit hInfo:(NSDictionary *)info
{
       //得到图片
       UIImage * image = [info objectForKey:UIImagePickerControllerO riginalImage];
       //图片存入相册
       UIImageWriteToSavedPhoto sAlbum(image, nil, nil, nil);
       [self dismissModalViewControll erAnimated:YES];
        
}
//点击Cancel按钮后执行方法
-(void)imagePickerControllerDid Cancel:(UIImagePickerController *)picker
{
       [self dismissModalViewControll erAnimated:YES];
}
调用相机照片和保存到图片库已经完成。
接着介绍打开照片库:
-(void)openPicLibrary
{
       //相册是可以用模拟器打开的
       if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerS ourceTypePhotoLibrary]) {
               UIImagePickerController * picker = [[UIImagePickerController alloc]init];
               picker.delegate = self;
               picker.allowsEditing = YES;//是否可以编辑
 
               //打开相册选择照片
               picker.sourceType = UIImagePickerControllerS ourceTypePhotoLibrary;
               [self presentModalViewControll er:picker   animated:YES];
               [picker release];
       }else{
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你没有摄像头" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];
               [alert show];
       }
        
}
 
//选中图片进入的代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
       [self dismissModalViewControll erAnimated:YES];
}
调用闪光灯的代码,由于我也不是很理解,所以没法加注释,但是已经亲测可用,但是调闪光灯时有一个算是bug吧,闪光灯会闲一下,然后再一直亮
-(void)openFlashlight
{
       AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaTy pe:AVMediaTypeVideo];
       if (device.torchMode == AVCaptureTorchModeOff) {
               //Create an AV session
               AVCaptureSession * session = [[AVCaptureSession alloc]init];
                
               // Create device input and add to current session
               AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
               [session addInput:input];
                
               // Create video output and add to current session
               AVCaptureVideoDataOutput  * output = [[AVCaptureVideoDataOutput  alloc]init];
               [session addOutput:output];
                
               // Start session configuration
               [session beginConfiguration];
               [device lockForConfiguration:nil];
                
               // Set torch to on
               [device setTorchMode:AVCaptureTorchModeOn];
                
               [device unlockForConfiguration];
               [session commitConfiguration];
                
               // Start the session
               [session startRunning];
                
               // Keep the session around
               [self setAVSession:self.AVSession];
                
               [output release];
       }
}
 
-(void)closeFlashlight
{
       [self.AVSession stopRunning];
       [self.AVSession release];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值