http://www.cnblogs.com/delonchen/archive/2011/06/12/CGContextDrawImage.html

这个函数绘制图片,但坐标系统原点在左上角,y方向向下的(坐标系A),但在Quartz中坐标系原点在左下角,y方向向上的(坐标系B)。图片绘制也是颠倒的。

要达到预想的效果必须变换坐标系,代码如下:

void drawImage(CGContextRef context, CGImageRef image , CGRect rect){

   CGContextSaveGState(context);

CGContextTranslateCTM(context, rect.origin.x, rect.origin.y);//4

CGContextTranslateCTM(context, 0, rect.size.height);//3

CGContextScaleCTM(context, 1.0, -1.0);//2

CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y);//1

CGContextDrawImage(context, rect, image);

CGContextRestoreGState(context);

}

A到B变换 通过1->2->3->4步骤实现的,这样好理解些

通常我会用UIImage drawInRect实现想要的功能。

我们在使用“CGContextShowTextAtPoint”,经常会遇到字体翻转问题。CGContextShowTextAtPoint word upside.

这个问题可以通过

CGContextTranslateCTM(ctx, 0, imageSize.height);
    CGContextScaleCTM(ctx, 1, -1);

解决。

不过要是想继续正常绘制其他内容,我们可以采用先存储后恢复的方式

CGAffineTransform normalState=CGContextGetCTM(context);

CGContextTranslateCTM(ctx, 0, imageSize.height);
    CGContextScaleCTM(ctx, 1, -1);

CGContextConcatCTM(context, normalState);

- (void)drawRect:(CGRect)rect
{CGContextRef context = UIGraphicsGetCurrentContext();CGContextSaveGState(context);CGContextTranslateCTM(context, 0, rect.size.height);CGContextScaleCTM(context, 1.0, -1.0);int firstCol = floorf(CGRectGetMinX(rect) / tileSize);int lastCol = floorf((CGRectGetMaxX(rect)-1) / tileSize);int firstRow = floorf(CGRectGetMinY(rect) / tileSize);int lastRow = floorf((CGRectGetMaxY(rect)-1) / tileSize);for( int row = firstRow; row <= lastRow; row++ ) {for( int col = firstCol; col <= lastCol; col++ ) {UIImage = [self getTileWithRow:row column:col];CGRect tileRect = CGRectMake((col * tileSize), row * tileSize),tileSize, tileSize);CGContextDrawImage(context, tileRect, tile.CGImage);}}CGContextRestoreGState(context);
}

讨论CGContextDrawImage相关推荐

  1. TVM/Relay 的 PartitionGraph()(mod) 函数讨论整理

    TVM/Relay 的 PartitionGraph()(mod) 函数讨论整理 TVM/Relay 的图形分区功能.以下简单示例,错误信息. PartitionGraph() 函数指定图形是用带有 ...

  2. 关于 RMAN 备份 数据块 一致性的讨论

    今天和 杭州恒生 的一个朋友讨论一个RMAN 在备份时数据块一致性的问题. 关于RMAN 的备份原理参考blog: RMAN 系列(一)---- RMAN 体系结构概述 http://blog.csd ...

  3. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论

    文章目录 1. 一致性 概览 1.1 分布式系统的 "正确性" 1.2 线性一致性(Linearizability) 1.3 顺序一致性(Sequential consistenc ...

  4. HTML中常见的各种位置距离以及dom中的坐标讨论

    最近在学习JavaScript,特意买了一本犀牛角书来看看,尼玛一千多页,看的我头昏脑涨,翻到DOM这章节,突然记起平常在使用DOM时,碰到了好多的这个dom里面的各种宽度,高度,特意在此写一写,写的 ...

  5. 深入讨论.NET Socket的Accept方法

    深入讨论.NET  Socket的Accept方法 考虑一个问题,假如同时有50个连接请求进入一个服务器(这种情况对于普通负载的Web服务器都是很常见的)会怎么样?阻塞式I/O只能循环调用Accept ...

  6. 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论

    作者:Scott Mitchell [概述] WEB开发自从有了基于脚本的WEB编程技术(如ASP)以来,经历了一个漫长的过程.通过使用微软的ASP.Net技术,传统的ASP中大量的.单调乏味的.重复 ...

  7. 现代软件工程 第十章 【典型用户和场景】 练习与讨论

    1. 讨论:下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的.我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2 ...

  8. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  9. 关于比特币现金升级问题讨论不断升温

    过去几周,比特币现金的支持者一直在讨论定于今年11月15日推出的硬叉.大多数人都明白,目前有两个阵营有着完全不同的愿景.看来双方在短期内不会达成妥协.最近,随着时间的推移,双方都在测试某些特性,并发表 ...

最新文章

  1. 当安卓 Emoji 遇上苹果 Emoji:傻傻分不清楚
  2. 深入理解ES6笔记(九)JS的类(class)
  3. swift3 0 Alamofire下载文件
  4. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域
  5. HTTPS协议之SSL/TLS协议四次握手
  6. mysql表大小限制_技术分享 | 在磁盘上查找 MySQL 表的大小
  7. 枚举、宏定义enum /defint/typedef
  8. 预测未来的环境,提前做出改变
  9. Input标签牲描述
  10. LinuxCNC的能做什么
  11. 多功能jQuery日期控件基于jeDate
  12. java applet图形_java APPlet 绘制图像
  13. 云计算中网络基础知识(升级版)
  14. ARM920T的MMU与Cache
  15. pixi 小游戏_使用 Pixi.js 开发微信小游戏
  16. uview中button细边框去除问题
  17. 转载一份诚恳的互联网找工作总结和感想(附:怎样花两年时间去面试一个人)
  18. acm.njupt--2026
  19. 基于javaweb的员工出差请假考勤管理系统(java+jsp+layui+html+servlet+mysql)
  20. fileupload实现多文件批量上传

热门文章

  1. 关于button不响应事件
  2. taobao-pamirs-schedule-2.0源码分析——任务队列分配源码分析
  3. Java菜鸟基础(一)
  4. C++11标准之右值引用(ravalue reference)
  5. android实现简单的聊天室
  6. MPLS/×××网络解决MTU问题方法
  7. 使用 ADO 向数据库中存储一张图片
  8. 学习 ASP.NET MVC (第五回)理论篇
  9. 通过ISA发布服务器(二)
  10. 问题六十一:三次b样条(b-spline)曲线的控制点和曲线形状的对应——以回旋体的“基本曲线”为例