博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
讨论CGContextDrawImage
阅读量:7098 次
发布时间:2019-06-28

本文共 2025 字,大约阅读时间需要 6 分钟。

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, 0rect.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);}

 

 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2470341.html

你可能感兴趣的文章
jquery获取css颜色值返回RGB应用
查看>>
(void __user *)arg 中__user的作用
查看>>
Redefine:Change in the Changing World
查看>>
POJ 3436 ACM Computer Factory 最大流
查看>>
atitit。全局变量的设计与实现 java php的异同
查看>>
自己定义控件-画板,橡皮擦,刮刮乐
查看>>
spark 按照key 分组 然后统计每个key对应的最大、最小、平均值思路——使用groupby,或者reduceby...
查看>>
顺序表示的线性表——顺序表
查看>>
categorys源码
查看>>
C与asm链接和内嵌
查看>>
349元我们应该有什么样的期待-原道N12豪华版 RK2906入手初体验
查看>>
简单PHP留言板之三 —— 头部文件以 及单 独设置PHP文件编码
查看>>
Android中Context
查看>>
WordPress超级基本教程(转)
查看>>
Python基础 3----文件和网络
查看>>
模块的耦合和内聚
查看>>
对话框
查看>>
迁移SQL SERVER 数据库实例
查看>>
HttpClient工具类v1.7
查看>>
Sqlite中使用rowid来表示行号,用于分页。
查看>>