UIimage的各种加载方式

    xiaoxiao2021-12-14  18

    转载标明出处:http://blog.sina.com.cn/s/blog_a843a8850101flo3.html

    一.读取图片

    1.从资源(resource)读取 [cpp]  viewplain copy print ? UIImage* image=[UIImage imageNamed:@"1.jpg"];   2.从网络读取 [cpp]  viewplain copy print ? 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.从手机本地读取 [cpp]  viewplain copy print ? //读取本地图片非resource  NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];  UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3];  UIImageView* imageView3=[[UIImageView alloc]initWithImage:imgFromUrl3];   4.从现有的context中获得图像 [cpp]  viewplain copy print ? //add ImageIO.framework and #import     CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);  CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);  CGContextRef ctx=UIGraphicsGetCurrentContext();  CGContextSaveGState(ctx);  //transformCTM的2种方式  //CGContextConcatCTM(ctx, CGAffineTransformMakeScale(.2, -0.2));  //CGContextScaleCTM(ctx,1,-1);  //注意坐标要反下,用ctx来作为图片源   CGImageRef capture=CGBitmapContextCreateImage(ctx);  CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);  CGContextDrawImage(ctx, CGRectMake(160, 230, 160, 230), img);  CGImageRef capture2=CGBitmapContextCreateImage(ctx);   5.用Quartz的CGImageSourceRef来读取图片 [cpp]  viewplain copy print ? CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);  CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);  

    二.保存图片

    1.转换成NSData来保存图片(imgFromUrl是UIImage) [cpp]  viewplain copy print ? //保存图片 2种获取路径都可以  //NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  //NSString*documentsDirectory=[paths objectAtIndex:0];    //NSString*aPath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",@"test"]];   NSString *aPath=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];  NSData *imgData = UIImageJPEGRepresentation(imgFromUrl,0);      [imgData writeToFile:aPath atomically:YES];      2.用Quartz的CGImageDestinationRef来输出图片,这个方式不常见,所以不做介绍,详细可以看apple文档Quartz2D Programming Guide

    三.绘制图(draw|painting)

    1.UIImageView方式加入到UIView层 [cpp]  viewplain copy print ? UIImageView* imageView=[[UIImageView alloc]initWithImage:image];  imageView.frame=CGRectMake(0, 0, 320, 480);  [self addSubview:imageView];  [imageView release];   2.[img drawAtPoint]系列方法 [cpp]  viewplain copy print ? [image4 drawAtPoint:CGPointMake(100, 0)];     3.CGContextDrawImage [cpp]  viewplain copy print ? CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);   4.CGLayer 这个是apple推荐的一种offscreen的绘制方法,相比bitmapContext更好,因为它似乎会利用iphone硬件(drawing-card)加速 [cpp]  viewplain copy print ? CGLayerRef cg=CGLayerCreateWithContext(ctx, CGSizeMake(320, 480), NULL);  //需要将CGLayerContext来作为缓存context,这个是必须的  CGContextRef layerContext=CGLayerGetContext(cg);  CGContextDrawImage(layerContext, CGRectMake(160, 230, 160, 230), img);   CGContextDrawLayerAtPoint(ctx, CGPointMake(0, 0), cg);   5.CALayer的contents [cpp]  viewplain copy print ? 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];
    转载请注明原文地址: https://ju.6miu.com/read-962170.html

    最新回复(0)