一.读取图片
1.从资源(resource)读取
2.从网络读取
- NSURL
*url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"]; - UIImage
*imgFromUrl =[[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:url]];
3.从手机本地读取
- //读取本地图片非resource
- NSString
*aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"]; - UIImage
*imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3]; - UIImageView*
imageView3=[[UIImageView alloc]initWithImage:imgFromUrl3];
- //add
ImageIO.framework and #import - CGImageSourceRef
source = CGImageSourceCreateWithU RL((CFURLRef)url, NULL); - CGImageRef
img= CGImageSourceCreateImage AtIndex(source,0,NULL); - CGContextRef
ctx=UIGraphicsGetCurrentCont ext(); - CGContextSaveGState(ctx);
- //transformCTM的2种方式
- //CGContextConcatCTM(ctx,
CGAffineTransformMakeSca le(.2, -0.2)); - //CGContextScaleCTM(ctx,1,-1);
- //注意坐标要反下,用ctx来作为图片源
- CGImageRef
capture=CGBitmapContextCreateIma ge(ctx); - CGContextDrawImage(ctx,
CGRectMake(160, 0, 160, 230), [image CGImage]); - CGContextDrawImage(ctx,
CGRectMake(160, 230, 160, 230), img); - CGImageRef
capture2=CGBitmapContextCreateIma ge(ctx);
5.用Quartz的CGImageSourceRef来读取图片
二.保存图片
1.转换成NSData来保存图片(imgFromUrl是UIImage)
- //保存图片
2种获取路径都可以 - //NSArray*paths=NSSearchPathForDirectori
esInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - //NSString*documentsDirectory=[paths
objectAtIndex:0]; - //NSString*aPath=[documentsDirectory
stringByAppendingPathCom ponent:[NSString stringWithFormat:@"%@.jpg",@"test"]]; - NSString
*aPath=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"]; - NSData
*imgData = UIImageJPEGRepresentatio n(imgFromUrl,0); - [imgData
writeToFile:aPath atomically:YES];
2.用Quartz的CGImageDestinationRef来输出图片,这个方式不常见,所以不做介绍,详细可以看apple文档Quartz2D Programming Guide
三.绘制图(draw|painting)
1.UIImageView方式加入到UIView层
- UIImageView*
imageView=[[UIImageView alloc]initWithImage:image]; - imageView.frame=CGRectMake(0,
0, 320, 480); - [self
addSubview:imageView]; - [imageView
release];
- CGContextDrawImage(ctx,
CGRectMake(160, 0, 160, 230), [image CGImage]);
4.CGLayer
这个是apple推荐的一种offscreen的绘制方法,相比bitmapContext更好,因为它似乎会利用iphone硬件(drawing-card)加速
- CGLayerRef
cg=CGLayerCreateWithContext (ctx, CGSizeMake(320, 480), NULL); - //需要将CGLayerContext来作为缓存context,这个是必须的
- CGContextRef
layerContext=CGLayerGetContext(cg); - CGContextDrawImage(layerContext,
CGRectMake(160, 230, 160, 230), img); - CGContextDrawLayerAtPoin
t(ctx, CGPointMake(0, 0), cg);
5.CALayer的contents
- UIImage*
image=[UIImage imageNamed:@"1.jpg"]; - CALayer
*ly=[CALayer layer]; - ly.frame=CGRectMake(0,
0, 320, 460); - ly.contents=[image
CGImage]; - [self.layer
addSublayer:ly];
四.其它
1.CGImage和UIImage互换
这样就可以随时切换UIKit和Quartz之间类型,并且选择您熟悉的方式来处理图片.
CGImage cgImage=[uiImage CGImage];
UIImage* uiImage=[UIImageimageWithCGImage:cgImage];