三:IOS图像学习(原以及实例参考)

3.1使用图像

为了便于操作图像IOS中定义图像类,UIImage饰UIKit框架中定义的图像类,其封装了高层次图像类,可以通过多种方式创建这些对象。在Core Graphics框架(或Quartz 2D)中也定义了CGImage,它表示位图图像,因为CGImage被封装起来了,所以通常通过CGImageRef来使用CGImage。

除了UIImage和CGImage,在Core Image框架中也有一个图像类CIImage,CIImage封装的图像类能够很好地进行图像效果处理,例如,滤镜的使用。UIImage、CGImage和CIImage之间可以相互转化,这个过程中需要注意内存释放问题,特别是CGImage与UIImage之间转化,涉及从C变量到OC对象转化,如果这里使用了ARC技术,反而会使内存释放问题更复杂,随着后面的学习逐步了解这些内存释放问题。

3.1.1 创建图像

如果一个icon.png文件放在应用程序包中(资源文件)加载图像,可以通过下面的几种代码实现:

UIImage *image = [UIImage imageNamed:@"icon.png"];

NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
或
UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];

NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [UIImage imageWithData:data];
或
UIImage *image = [[UIImage alloc ]initWithData:data];

如果icon.png文件放在应用程序杀箱目录中国年的Document目录下面,可以通过下面的几种代码实现:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
或
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [UIImage imageWithData:data];
或
UIImage *image = [[UIImage alloc] initWithData:data];

在上述代码中获得应用程序沙箱目录中国年Document目录语句如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@"icon.png"];

如果icon.png文件放在云端服务器端http://xxx/icon.png下,可以通过如下的几种方式创建UIImage图像对象

NSURL *url = [NSURL URLWithString:@"http://xxx/icon.png"];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];UIImage *image = [[UIImage alloc] initWithData:data];

3.1.2 从设备图片库选取或从照相机抓取

UIKit中提供了一个图像选择器UIImagePickerController,UIImagePickerController不仅不可实现选取图像,还可以从相簿和相机胶卷中选择。相簿和相机胶卷是有区别的,相簿包含了相机胶卷。相簿可以查看所有图片,而相机胶卷是通过照相机拍摄或截屏获得的图片。

UIImagePickerController的主要属性是sourceType,sourceType属性是在枚举UIImagePickerControllerSourceType中定义的三个常量:

  • UIImagePickerControllerSourceTypePhotoLibrary设置图片来源于”相簿”
  • UIImagePickerControllerSourceTypeCamera设置图片来源于”照相机”
  • UIImagePickerControllerSourceTypeSavePhotosAlbum设置图片来源于”相机胶卷”

UIImagePickerController委托对象需要实现UIImagePickerControllerDelegate委托协议。UIImagePickerControllerDelegate中定义了以下两个方法:
- -imagePickerController:didFinishPickerMediaWithInfo:当选择完成时调用
- -imagePickerControllerDidCancel:当选择取消时调用

下面通过一个实例具体介绍:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
<UIImagePickerControllerDelegate,UINavigationControllerDelegate>


@property (strong, nonatomic) UIImagePickerController *imagePicker;

@property (retain, nonatomic) IBOutlet UIImageView *imageView;

- (IBAction)pickPhotoLibrary:(id)sender;

- (IBAction)pickPhotoCamera:(id)sender;

@end

在.h文件的文件声明实现UIImagePickerControllerDelegate和UINavigationControllerDelegate委托协议,其中UINavigationControllerDelegate也是UIImagePickerControllerDelegate属性要求实现的协议,UINavigationControllerDelegate协议定义了两个方

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值