当前位置: 首页 > 编程笔记 >

IOS打开系统相机的闪光灯

曹昊焱
2023-03-14
本文向大家介绍IOS打开系统相机的闪光灯,包括了IOS打开系统相机的闪光灯的使用技巧和注意事项,需要的朋友参考一下

IOS有两种的拍照和视频的方式:

1.直接使用UIImagePickerController,这个类提供了一个简单便捷的拍照与选择图片库里图片的功能。

2.另一种是通过AVFoundation.framework框架完全自定义拍照的界面和选择图片库界面。我只做了第一种,就先给大家介绍第一种做法:

一、首先调用接口前,我们需要先判断当前设备是否支持UIImagePickerController,用isSourceTypeAvailable:来判断是否可用

二、查看符合的媒体类型,这个时候我们调用availableMediaTypeForSourceType:判断

在调用UIImagePickerController时我们需要加入他的两个代理方法:

UINavigationControllerDelegate和UIImagePickerControllerDelegate,在调用摄像头的时候还可以调闪光灯,一会代码里有。

要调用闪光灯需要先建一个AVCaptureSession类的实例对象:


//  Created by 张茫原 on 13-1-23.

//  Copyright (c) 2013年 张茫原. All rights reserved.

//

 

#import <UIKit/UIKit.h>

//调用闪光灯调用框架

#import <AVFoundation/AVFoundation.h>

 

@interface CameraViewController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate>

{

    AVCaptureSession * _AVSession;//调用闪光灯的时候创建的类

}

 

@property(nonatomic,retain)AVCaptureSession * AVSession;

 

@end

在.m的- (void)viewDidLoad里建立4Button,Camera调用相机、Library调用图片库、flashlight打开闪光灯、close关闭闪光灯,这里创建Button的代码我就不再写了。


//打开相机

-(void)addCarema

{

    //判断是否可以打开相机,模拟器此功能无法使用

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

         

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

        picker.delegate = self;

        picker.allowsEditing = YES;  //是否可编辑

        //摄像头

        picker.sourceType = UIImagePickerControllerSourceTypeCamera;

        [self presentModalViewController:picker animated:YES];

        [picker release];

    }else{

        //如果没有提示用户

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你没有摄像头" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];

        [alert show];

    }

}

打开相机后,然后需要调用UIImagePickerControllerDelegate里的方法,拍摄完成后执行的方法和点击Cancel之后执行的方法:


//拍摄完成后要执行的方法

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

{

    //得到图片

    UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];

    //图片存入相册

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

    [self dismissModalViewControllerAnimated:YES];

}

//点击Cancel按钮后执行方法

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

{

    [self dismissModalViewControllerAnimated:YES];

}

调用相机照片和保存到图片库已经完成。

接着介绍打开照片库:


-(void)openPicLibrary

{

    //相册是可以用模拟器打开的

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

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

        picker.delegate = self;

        picker.allowsEditing = YES;//是否可以编辑

        //打开相册选择照片

        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

        [self presentModalViewController: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 dismissModalViewControllerAnimated:YES];

}

调用闪光灯的代码,由于我也不是很理解,所以没法加注释,但是已经亲测可用,但是调闪光灯时有一个算是bug吧,闪光灯会闲一下,然后再一直亮


-(void)openFlashlight

{

    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType: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];

}

以上所述就是本文的全部内容了,希望大家能够喜欢。

 类似资料:
  • 本文向大家介绍iOS开发-调用系统相机和相册获取照片示例,包括了iOS开发-调用系统相机和相册获取照片示例的使用技巧和注意事项,需要的朋友参考一下 前言:相信大家都知道大部分的app都是有我的模块的,而在我的模块基本都有用户的头像等信息,并且是可以更改头像的。那么今天小编给大家简单介绍一下iOS开发中如何调用系统相机拍照或者相册获取照片。要获取系统相机或者相册,我们需要使用到 UIImagePic

  • 问题内容: 我需要一种在录制视频的同时在Android设备上控制照相机闪光灯的方法。我正在制作频闪灯应用,使用频闪灯闪烁的视频拍摄视频将能够记录高速移动的物体,例如风扇叶片。 只能通过启动视频预览并在相机参数中设置FLASH_MODE_TORCH来启用闪光灯。看起来像这样: 预览开始后,我可以来回翻转该参数以打开和关闭灯光。在尝试录制视频之前,此方法效果很好。麻烦的是,为了将摄像机提供给Media

  • 本文向大家介绍iOS系统缓存方面开发的相关基础,包括了iOS系统缓存方面开发的相关基础的使用技巧和注意事项,需要的朋友参考一下 一、关于同一个URL的多次请求     有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的。 上面的情况会造成以下问题   (1)用户流量的浪费   (2)程序响应速度不够快   解决上面的问题,一般考虑

  • 我在网站上非常关注教程和答案,但没有成功。花很多时间。 使用,方法TakePhotoAsync()未打开相机(Genymotion 9.0 API-28 |设备三星j7 prime.android 8.0)。 工作精彩。 AndroidManifest。xml 文件路径。xml 汇编信息。反恐精英 主要活动。反恐精英 方法XAML。反恐精英 问题在

  • 我创建了一个主题为“导航抽屉活动”的项目,我想在左侧菜单上有两个选项: null

  • ap.choosePhoneContact(CALLBACK) 选择系统通信录中某个联系人的电话。 CALLBACK 参数说明 名称 类型 描述 name String 选中的联系人姓名 mobile String 选中的联系人手机号 错误说明 error 描述 10 没有权限; 11 用户取消操作(或设备未授权使用通讯录) 代码示例 <script src="https://gw.alipayo