我正在尝试了解石英2d坐标系,目前我正在阅读Apple参考指南和旧书"Quartz 2d graphics for mac os x developer".
我理解用户空间和设备空间概念的概念,设备空间可以有不同的默认坐标系,设备空间坐标不能修改,我们通过修改其坐标系加入设备空间来映射用户空间实现欲望的结果.
用于mac os x开发者书的Quartz 2d图形说:
变换坐标系时,必须有另一个坐标系来与之进行比较.转换提供从一个坐标系到另一个坐标系的相对映射.在变换后的坐标系中绘制时,变换会将图形映射回第一个坐标系.固定坐标系中该图形的外观受到转换的影响.
我没有大胆地提到这一点.
和
Quartz使用单独的坐标系 - 用户空间 - 使用当前变换矩阵或CTM将其映射到输出设备 - 设备空间的坐标系来实现设备独立性.矩阵是用于有效地描述一组相关方程的数学构造.当前变换矩阵是称为仿射变换的特定类型的矩阵,其通过应用平移,旋转和缩放操作(移动,旋转和调整坐标系的大小的计算)将点从一个坐标空间映射到另一个坐标空间.
当前转换矩阵具有次要目的:它允许您转换对象的绘制方式.例如,要绘制一个旋转45度的框,可以在绘制框之前旋转页面的坐标系(CTM).Quartz使用旋转坐标系绘制到输出设备.
令人困惑的是"Quartz使用旋转的坐标系统绘制到输出设备.",如果我想绘制一个旋转的对象(图像等)而旋转其他旋转则会发生什么?我们有旋转的整个坐标旋转的每个东西都会旋转吗?
我正在尝试不同的实验,但无法绕过这个,我创建了一个图像,我在Photoshop中绘制了两行复制左下角坐标系,然后添加到我的项目中,通过调用CGContextRotateCTM(myContext, 45);drawrect方法可视地看到坐标是如何表现的,但它没有对使用界面生成器在uiimage中放置图像而包含在xib文件中的图像做任何事情.
此代码来自石英2D编程指南
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGRect contextRect = self.bounds;
CGContextTranslateCTM(myContext, 0, contextRect.size.height);
CGContextRotateCTM(myContext, 45); //my modification
CGContextScaleCTM(myContext, 1, -1);
float w, h;
w = contextRect.size.width;
h = contextRect.size.height;
CGAffineTransform myTextTransform;
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
CGContextSetCharacterSpacing (myContext, 10);
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke);
CGContextSetRGBFillColor (myContext, 0, …Run Code Online (Sandbox Code Playgroud) Quartz 2D不透明数据类型
除了图形上下文之外,Quartz 2D API还定义了各种不透明数据类型.由于API是Core Graphics框架的一部分,因此数据类型和对它们进行操作的例程使用CG前缀.
Quartz 2D从应用程序操作的不透明数据类型创建对象,以实现特定的绘图输出.图1-3显示了将绘图操作应用于Quartz 2D提供的三个对象时可以实现的各种结果.例如:
您可以通过创建PDF页面对象,对图形上下文应用旋转操作,以及要求Quartz 2D将页面绘制到图形上下文来旋转和显示PDF页面.
您可以通过创建图案对象,定义构成图案的形状以及设置Quartz 2D以在绘制图形上下文时将图案用作绘图来绘制图案.
您可以通过创建着色对象来填充具有轴向或径向着色的区域,提供确定着色中每个点的颜色的函数,然后要求Quartz 2D将着色用作填充颜色.
我无法理解苹果参考指南的这一部分
特别是我大胆的事情,比如"他们"被评判的内容?
请详细说明不透明数据类型,而不是c或c ++术语.
在此先感谢,问候.
在这段代码中
CGRect contextRect = self.bounds;
会参考哪个界限?rectangle,imageRect或整个iOS视图.
我试图使用quartz2D来操作图像,我通过查看不同的示例来创建此代码,并且在//之间编写的代码来自Apple Quartz2D指南绘制文本.
在此先感谢,问候.
- (void)drawRect:(CGRect)rect
{
CGSize cgs = CGSizeMake(250.0, 400.0);
UIGraphicsBeginImageContext(cgs);
CGRect rectangle = CGRectMake(0,0,cgs.width,cgs.height);
CGRect imageRect = CGRectInset(rectangle, 5.4, 5.4);
imageRect.size.height -= 100;
UIImage *myImage = [UIImage imageNamed:@"pumpkin.jpg"];
[myImage drawInRect:imageRect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 10.0);
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0);
CGContextStrokeRect(context, rectangle);
//
CGRect contextRect = self.bounds;
CGContextTranslateCTM(context, 0, contextRect.size.height);
CGContextScaleCTM(context, 1, -1);
float w, h;
w = contextRect.size.width;
h = contextRect.size.height;
CGAffineTransform myTextTransform;
CGContextSelectFont (context, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
CGContextSetCharacterSpacing (context, …Run Code Online (Sandbox Code Playgroud)