初始化图片方式

一.读取图片

1.从资源(resource)读取
  1. UIImage* image=[UIImage imageNamed:@"1.jpg"];
2.从网络读取
  1. NSURL *url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];
  2. UIImage *imgFromUrl =[[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:url]];
3.从手机本地读取
  1. //读取本地图片非resource
  2. NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
  3. UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3];
  4. UIImageView* imageView3=[[UIImageView alloc]initWithImage:imgFromUrl3];
 

4.从现有的context中获得图像

  1. //add ImageIO.framework and #import
  2. CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
  3. CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
  4. CGContextRef ctx=UIGraphicsGetCurrentContext();
  5. CGContextSaveGState(ctx);
  6. //transformCTM的2种方式
  7. //CGContextConcatCTM(ctx, CGAffineTransformMakeScale(.2, -0.2));
  8. //CGContextScaleCTM(ctx,1,-1);
  9. //注意坐标要反下,用ctx来作为图片源
  10. CGImageRef capture=CGBitmapContextCreateImage(ctx);
  11. CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);
  12. CGContextDrawImage(ctx, CGRectMake(160, 230, 160, 230), img);
  13. CGImageRef capture2=CGBitmapContextCreateImage(ctx);

5.用Quartz的CGImageSourceRef来读取图片

  1. CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
  2. CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
 
 

二.保存图片

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

三.绘制图(draw|painting)

1.UIImageView方式加入到UIView层
  1. UIImageView* imageView=[[UIImageView alloc]initWithImage:image];
  2. imageView.frame=CGRectMake(0, 0, 320, 480);
  3. [self addSubview:imageView];
  4. [imageView release];
 

2.[img drawAtPoint]系列方法

  1. [image4 drawAtPoint:CGPointMake(100, 0)];
 

3.CGContextDrawImage

  1. CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);

4.CGLayer

这个是apple推荐的一种offscreen的绘制方法,相比bitmapContext更好,因为它似乎会利用iphone硬件(drawing-card)加速
  1. CGLayerRef cg=CGLayerCreateWithContext(ctx, CGSizeMake(320, 480), NULL);
  2. //需要将CGLayerContext来作为缓存context,这个是必须的
  3. CGContextRef layerContext=CGLayerGetContext(cg);
  4. CGContextDrawImage(layerContext, CGRectMake(160, 230, 160, 230), img);
  5. CGContextDrawLayerAtPoint(ctx, CGPointMake(0, 0), cg);

5.CALayer的contents

  1. UIImage* image=[UIImage imageNamed:@"1.jpg"];
  2. CALayer *ly=[CALayer layer];
  3. ly.frame=CGRectMake(0, 0, 320, 460);
  4. ly.contents=[image CGImage];
  5. [self.layer addSublayer:ly];

四.其它

1.CGImage和UIImage互换
这样就可以随时切换UIKit和Quartz之间类型,并且选择您熟悉的方式来处理图片.
CGImage cgImage=[uiImage CGImage];
UIImage* uiImage=[UIImage
imageWithCGImage:cgImage];
 

iOS开发——UI篇OC篇&初始化图片方式的更多相关文章

  1. iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍

    UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...

  2. iOS开发——UI高级OC篇&自定义控件之调整按钮中子控件(图片和文字)的位置

    自定义控件之调整按钮中子控件(图片和文字)的位置 其实还有一种是在storyBoard中实现的,只需要设置对应空间的左右间距: 这里实现前面两种自定义的方式 一:imageRectForContent ...

  3. ios开发——实用技术篇OC篇&iOS的主要框架

    iOS的主要框架         阅读目录 Foundation框架为所有的应用程序提供基本系统服务 UIKit框架提供创建基于触摸用户界面的类 Core Data框架管着理应用程序数据模型 Core ...

  4. iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据

    网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...

  5. iOS开发——高级技术OC篇&运行时(Runtime)机制

    运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档 ...

  6. iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

  7. iOS开发——运行时OC篇&使用运行时获取系统的属性:使用自己的手势修改系统自带的手势

    使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛 ...

  8. iOS开发——使用技术OC篇&简单九宫格锁屏功能的实现与封装

    简单九宫格锁屏功能的实现与封装 首先来看看最后的实现界面. 在这开始看下面的内容之前希望你能先大概思考活着回顾一下如果 你会怎么做,只要知道大概的思路就可以. 由于iphone5指纹解锁的实现是的这个 ...

  9. iOS开发——新特性OC篇&IOS9 系统新特性

    IOS9 系统新特性 2015年6月89号凌晨召开的WWDC 2015苹果开发者大会发布了全新的iOS 9系统,PC6小编今天给大家整理了这次iOS9的系统更新带来了哪些新的功能与升级,本次新功能一览 ...

  10. iOS开发——新特性OC篇&IOS9 SDK新特性

    iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...

随机推荐

  1. C语言指针5分钟教程

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里“引用”表示计算机内存地址.从指针指向的内 存读取数据称作指针的取值.指针可以指向某些 ...

  2. 2、列表item_圆头像_信息提示

    import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import an ...

  3. 【LeetCode 99】Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  4. 【剑指offer 面试题14】调整数组顺序使奇数位于偶数前面

    思路: 头尾指针,向中间遍历,依据条件交换元素. #include <iostream> using namespace std; void reOrder(int *pData, uns ...

  5. Android的Eclipse升级笔记

    Eclipse优化: 1.可以删除的插件有: EGit CVS Mylyn cdt 1.不用多次加载布局容器的版本: ADT-22.3.0 adt-bundle-windows-x86-2013103 ...

  6. redis集群的搭建

    1.首先下载好软件包 #cd /opt/tzr/ #wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz #mkdir /opt/tzr ...

  7. 【原】Kryo序列化篇

    Kryo是一个快速有效的对象图序列化Java库.它的目标是快速.高效.易使用.该项目适用于对象持久化到文件或数据库中或通过网络传输.Kryo还可以自动实现深浅的拷贝/克隆. 就是直接复制一个对象对象到 ...

  8. HDU5780 gcd 欧拉函数

    http://acm.hdu.edu.cn/showproblem.php?pid=5780 BC #85 1005 思路: 首先原式化简:x​^gcd(a,b)​​−1 也就是求n内,(公约数是i的 ...

  9. HTML编码

    JavaScript encodeURI() 函数 JavaScript encodeURIComponent() 函数 1.encodeURI: 不编码字符① - _ * . ! ~ ' ( ) ; ...

  10. matlab search path

    What Is the MATLAB Search PathThe search path, or path is a subset of all the folders in the file sy ...