Quartz 2D在ios中的使用简述一:坐标体系

  Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境,官方文档:Quartz 2D Programming Guide

一、坐标体系

这样的坐标体系就导致我们使用Quartz 2D画的图是倒转的,我们要做以下处理才能得到我们想要的图片效果:

1.画布延Y轴下移height

2.对Y轴做垂直翻转

这2个步骤的代码为:

1  CGContextTranslateCTM(context, 0, height);
2  CGContextScaleCTM(context, 1.0, -1.0);

测试代码为:

//代码1
- (void)drawRect:(CGRect)rect {
    CGContextRef context=UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1, 0, 0, 1);
    CGContextFillRect(context, CGRectMake(0, 100, 100, 100));
    NSString *text=@"文字";
    UIFont *font=[UIFont systemFontOfSize:14];
    [text drawAtPoint:CGPointMake(0, 200) withAttributes:font.fontDescriptor.fontAttributes];
    UIImage *img=[UIImage imageNamed:@"gg.jpg"];
    [img drawInRect:CGRectMake(0, 300, 100, 100)];
}
//代码2
-(id)initWithFrame:(CGRect)frame
{
    if (self=[super initWithFrame:frame]) {

        [self setBackgroundColor:[UIColor redColor]];
        UIImageView *imgview=[[UIImageView alloc] initWithFrame:self.bounds];

        CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
        float width=self.bounds.size.width;
        float height=self.bounds.size.height;
        //256=10000000
        int bitsPerComponent=8;
        //RGBA*8*width
        int bytesPerRow=4*8*width;
        CGContextRef context=CGBitmapContextCreate(NULL, width, height, bitsPerComponent,  bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);
        //翻转画布
        CGContextTranslateCTM(context, 0, height);
        CGContextScaleCTM(context, 1.0, -1.0);
        UIGraphicsPushContext(context);

        //画布透明
        //CGContextFillRect(context, self.bounds);
        CGContextSetRGBFillColor(context, 1, 0, 0, 1);
        CGContextSetRGBStrokeColor(context, 0, 1, 0, 1);
        CGContextFillRect(context, CGRectMake(0, 100, 100, 100));
        NSString *text=@"文字";
        UIFont *font=[UIFont systemFontOfSize:14];
        [text drawAtPoint:CGPointMake(0, 200) withAttributes:font.fontDescriptor.fontAttributes];
        UIImage *img=[UIImage imageNamed:@"gg.jpg"];
        [img drawInRect:CGRectMake(0, 300, 100, 100)];

        CGImageRef cgimg = CGBitmapContextCreateImage(context);
        UIImage *resultImg = [UIImage imageWithCGImage:cgimg];

        CGContextRelease(context);
        CGColorSpaceRelease(colorSpace);
        CGImageRelease(cgimg);

        imgview.image=resultImg;
        [self addSubview:imgview];

    }
    return self;
}

2段代码实现的效果一样,代码1并没有做翻转操作,那是因为UIKit在UIGraphicsGetCurrentContext()得到的画布已经帮我们适应好了UIKit的坐标体系。

转载请注明出处:http://www.cnblogs.com/bandy/p/4341538.html

时间: 2024-08-13 20:12:49

Quartz 2D在ios中的使用简述一:坐标体系的相关文章

Quartz 2D在ios中的使用简述二:创建画布

在iOS中使用Quartz画图时,第一步就是要获取画布(图形上下文),然后再画布上做各种操作.先看下CoreGraphics.h这个头文件,就可以知道能够创建多少种上下文类型. #include <CoreGraphics/CGBase.h> #include <CoreGraphics/CGAffineTransform.h> #include <CoreGraphics/CGBitmapContext.h> #include <CoreGraphics/CGC

绘图与滤镜全面解析--Quartz 2D 、Core Image

绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Core Image中强大的滤镜功能. Quartz 2D 基本图形绘制 视图刷新 其他图形上下文 Core Image Quartz 2D 在iOS中常用的绘图框架就是Quartz 2D,Quartz 2D是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.Qu

iOS开发——图形编程OC篇&amp;(一)Quartz 2D介绍

Quartz 2D介绍 一.什么是Quartz2D Quartz 2D是?个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 二.Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,??有各种各样的UI控件 UILabel:显?文字 UIImageView:显示图片 UIButton:同时显示图片和?字

ios中关于对锚点的理解

锚点在ios中见到的地方不多,大部分用在动画中. 今天看到一个动画,上面都是关于锚点的,锚点这个概念在两年前看cocos2d得基本概念时接触过,当时没怎么看,今天看到了,就在好好的学一下. 看了一篇blog,是关于锚点的,就借鉴一些上面的图像: cocos2d里采用OpenGL ES坐标系,坐标原点在屏幕左下角.而ios采用的是Quartz 2D坐标系,坐标原点在屏幕左上角. 在cocos2d和ios中分别把视图的坐标点设为(10,10),结果如下: 那么什么是锚点呢?下面以一个例子来说明: 比

Quartz 2D 概述

Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quartz 2D API来实现许多功能,如基本路径的绘制.透明度.描影.绘制阴影.透明层.颜色管理.反锯齿.PDF文档生成和PDF元数据访问.在需要的时候,Quartz 2D还可以借助图形硬件的功能. 在Mac OS X中,Quartz 2D可以与其它图形图像技术混合使用,如Core Image.Core Video.OpenGL.QuickTime.例如,通过使用 QuickTime的Graphics

Quartz 2D编程指南(1) - 概览

Quartz 2D编程指南是论坛会员德鲁伊翻译的国外的Quartz 2D一系列学习资料,供大家参考 Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quartz 2D API来实现许多功能,如基本路径的绘制.透明度.描影.绘制阴影.透明层.颜色管理.反锯齿.PDF文档生成和PDF元数据访问.在需要的时候,Quartz 2D还可以借助图形硬件的功能.在Mac OS X中,Quartz 2D可以与其它图形图像技术混合使用,如Core Image.Core

iOS 开发中利用 Quartz 2D 获得圆角图片

背景: 现在社交软件中,圆角的图片可以说是泛滥了,原来方方正正的 QQ 头像,都被世俗磨平了... 那么怎么将一张图片加工成圆角呢? 你可能会说:"找美工啊!" 对!偷懒必备口诀之 "找美工!" 但是,如果用户自己要上传自定义头像呢? 还是一要程序处理嘛! 下面我们利用强大的Quartz 2D 来自己加工图片 直接上代码: 代码: 我是给 UIImage 增加了一个分类,以后直接各种用 + (instancetype)imageWithIcon:(NSString

IOS开发—Quartz 2D介绍

Quartz 2D学习记录 Quartz 2D简单介绍 一.什么是Quartz 2D Quarz 2D是一个二维绘画引擎,同时支持ios和mac,其API是Core Graphics框架的,是纯C语言的.IOS系统提供的大部分控件的内容都是通过Quartz 2D画出来的,因此Quartz 2D的一个很重要的价值是:自定义view(自定义UI控件). 二.一个重要的概念:图形上下文 图形上下文(Graphics context)是一个CGContextRef数据,其作用是: 保存绘图信息.绘图属性

iOS开发——图层OC篇&amp;Quartz 2D各种绘制实例

Quartz 2D各种绘制实例 首先说一下,本篇文章只是介绍怎么使用Quartz 2D绘制一些常用的图像效果,关于Quartz和其他相关技术请查看笔者之前写的完整版(Quartz 2D详解) 一:画线 1 // 1.获取跟当前View相关联的layer上下文(画板) 2 // 总结:目前获取的所有上下文都是以UIGraphics开头 3 // CGContextRef:上下文类型 4 // CG:CoreGraphics Ref:引用 5 CGContextRef ctx = UIGraphic