1。导入库和协议(protocol)
#import <MobileCoreServices/MobileCoreServices.h>
<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
方法:UIImageWriteToSavePhotosAlbum
e.g.
- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{
__block BOOL result = NO;
if ([paramMediaType length] == 0){
NSLog(@"Media type is empty.");
return NO;
}
//获取本机中符合指定资源的所有媒体类型,以便后续判定是否支持
NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:paramSourceType];
[availableMediaTypes enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSString *mediaType = (NSString *)obj;
if ([mediaType isEqualToString:paramMediaType]){
result = YES;
*stop= YES;
}
}];
return result;
}
//是否支持拍照
- (BOOL) doesCameraSupportTakingPhotos{
//kUTTypeImage:静态图片
return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];
}
//是否可用摄像头
- (BOOL) isCameraAvailable{
return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera];
}
//保存后调用
- (void) imageWasSavedSuccessfully:(UIImage *)paramImage didFinishSavingWithError:(NSError *)paramError contextInfo:(void *)paramContextInfo{
if (paramError == nil){
NSLog(@"Image was saved successfully.");
} else {
NSLog(@"An error happened while saving the image.");
NSLog(@"Error = %@", paramError);
}
}
//delegate:完成选择
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSLog(@"Picker returned successfully.");
NSLog(@"info:%@", info);
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]){
UIImage *theImage = nil;
if ([picker allowsEditing]){
theImage = info[UIImagePickerControllerEditedImage];
} else {
theImage = info[UIImagePickerControllerOriginalImage];
}
SEL selectorToCall = @selector(imageWasSavedSuccessfully:didFinishSavingWithError:contextInfo:);
//保存到相册
UIImageWriteToSavedPhotosAlbum(theImage, self, selectorToCall, NULL);
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
//delegate 取消选择
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"Picker was cancelled");
[picker dismissViewControllerAnimated:YES completion:nil];
}
- (void)actionDisplayPickerController{
if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]){
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera;
controller.mediaTypes = @[(__bridge NSString *)kUTTypeImage];
controller.allowsEditing = YES;
controller.delegate = self;
[self presentViewController:controller animated:YES completion:nil];
} else {
NSLog(@"Camera is not available.");
}
}
本文深入探讨了iOS开发领域的图像处理与AR特效应用,详细介绍了OpenGL ES滤镜、OpenCV图像处理、人脸标定AR等关键技术,并通过实例展示了如何将这些技术应用于实际项目中。
193

被折叠的 条评论
为什么被折叠?



