• 图像选择与处理


    图像选择器(UIImagePickerController)显示用户的照片库,用户选择照片后,图像选择器返回一个相应的UIImage对象。

    要显示图像选择器,可分配并初始化一个UIImagePickerController实例,再设置属性sourceType,以指定用户可从哪些地方选择图像。

    UIImagePickerControllerSourceTypeCamera — 相机拍摄

    UIImagePickerControllerSourceTypePhotoLibrary — 照片库

    UIImagePickerControllerSourceTypeSavedPhotosAlbum — 相机胶卷

    照片库除了包含相机胶卷,还有来自其它App创建的图片文件夹:

    触发图像选择器的一般实现方法:

    - (IBAction)btnTestHandler:(id)sender
    {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        
        imagePicker.delegate = self;
        
        imagePicker.allowsEditing = YES;
    
        [self presentViewController:imagePicker animated:YES completion:nil];
        
        [[UIApplication sharedApplication] setStatusBarHidden:YES]; //在iOS7下这句代码无效。
    }

    要在用户选择图像或取消选择图像时采取相应的措施。首先要为UIImagePickerController实例的delegate属性指定一个类,该类需要遵守协议UIImagePickerControllerDelegate,并实现相应的方法。同时要遵守导航控制器委托UINavigationControllerDelegate,但无需实现该协议的任何方法。

    @interface ViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate>

    用户在图像选择器中做出选择时,将自动调用方法imagePickerController:didFinishPickingMediaWithInfo。这个方法接收到了一个NSDictionary对象,它可能包含多项信息:图像本身、编辑后的图像版本(如果允许裁剪/缩放)或有关图像的信息。要获取所需的信息,必须提供相应的键。例如,要获取选定的图像(UIImage),需要使用UIImagePickerControllerOriginalImage键。

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        [self dismissViewControllerAnimated:YES completion:nil];
        UIImage *chosenImage = [info objectForKey:UIImagePickerControllerOriginalImage];
        //Do something with the image here
    }

    用户取消选择图像,会调用到方法imagePickerControllerDidCancel

    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
        [self dismissViewControllerAnimated:YES completion:nil];
    }

    Core Image框架是iOS 5.0新增的,它提供了一些非破坏性方法,让您能够将滤镜应用于图像以及执行其他类型的图像分析。要在应用程序使用Core Image,首先需要添加Core Image框架,再导入其接口文件:

    #import <CoreImage/CoreImage.h>

    Core Image框架最常用的一个操作是给图像添加滤镜,Core Image定义了一种新的非破坏性图像类型CIImage,而比较常用的类型是UIImage(通常存在于UIImageView),这两种类型是可以互相转换的:

    CIImage *imageToFilter = [[CIImage alloc] initWithImage:self.myImageView.image];
        
    UIImage *myImage = [UIImage imageWithCIImage:imageToFilter];

    要应用滤镜,必须知道滤镜的名称及其所需的参数。例如,Core Image棕色滤镜名为CISepiaTone,它接受一个名为inputIntensity的参数,该参数的取值为0.0和1.0之间的数字(值越大滤镜越强烈),下面的代码为一副图片添加了棕色滤镜:

    CIImage *inputImage = [[CIImage alloc] initWithImage:self.myImageView.image];
    
    CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
    [filter setDefaults];
    [filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputIntensity"];
    [filter setValue:inputImage forKey:@"inputImage"];
    
    CIImage *outputImage = [filter valueForKey:@"outputImage"];
    self.myImageView.image = [UIImage imageWithCIImage:outputImage];
  • 相关阅读:
    面试题-JAVA算法题
    分布式
    linux中文件描述符fd和struct file结构体的释放
    Linux字符设备驱动
    Linux内存地址管理概述
    mnist卷积网络实现
    【TensorFlow官方文档】MNIST机器学习入门
    FCN笔记
    datetime.timedelta
    tensorflow中的函数获取Tensor维度的两种方法:
  • 原文地址:https://www.cnblogs.com/CoderWayne/p/3748147.html
Copyright © 2020-2023  润新知