Graphics Context

Graphics Context定义了基本的绘制属性,如颜色、裁减区域、线条宽度和样式信息、字体信息、混合模式

Quartz2D是C语言的框架,并且部分需要自己管理内存:

•使用含有“Create”或“Copy”的函数创建的对象,使用完后必须释放,否则将导致内存泄露

•使用不含有“Create”或“Copy”的函数获取的对象,则不需要释放

•如果retain了一个对象,不再使用时,需要将其release掉。可以使用Quartz 2D的函数来指定retain和release一个对象。例如,如果创建了一个CGColorSpace对象,则使用函数CGColorSpaceRetain和CGColorSpaceRelease来retain和release对象。也可以使用Core Foundation的CFRetain和CFRelease。注意不能传递NULL值给这些函数

----------------------------------

CIFilter :输出一个CIImage,使用键值对对输入的图像设置参数

CIContext

CIImage

CGImageRef

overview  and tasks

CIContext *context = [CIContext contextWithOptions:nil];

CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"365.jpg"]];

// create gaussian blur filter

CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];

[filter setValue:inputImage forKey:kCIInputImageKey];

[filter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputRadius"];

// blur image

CIImage *result = [filter valueForKey:kCIOutputImageKey];

CGImageRef cgImage = [context createCGImage:result fromRect:blurFrame];

UIImage *image = [UIImage imageWithCGImage:cgImage];

CGImageRelease(cgImage);

bgView.image = image;


----------------------------------

我们可以通过animationWithKeyPath键值对的方式来改变动画

animationWithKeyPath的值:

transform.scale = 比例轉換

transform.scale.x = 闊的比例轉換

transform.scale.y = 高的比例轉換

transform.rotation.z = 平面圖的旋轉

opacity = 透明度

margin

zPosition

backgroundColor

cornerRadius

borderWidth

bounds

contents

contentsRect

cornerRadius

frame

hidden

mask

masksToBounds

opacity

position

shadowColor

shadowOffset

shadowOpacity

shadowRadius


----------------------------------

转换

变换操作函数概览

如何修改CTM

如何创建一个仿射变换

如何选择两个相同的变换

如何获取user-to-device-space变换

旋转、平移、缩放CTM。我们还可以联结一个仿射变换矩阵?

创建仿射变换

Quartz also allows you to create affine transforms that don’t operate on user space until you decide to apply the transform to the CTM. You use another set of functions to create affine transforms, which can then be concatenated with the CTM.

使用的每个变换操作都更新了CTM

CTM总是用于表示用户空间和设备空间的当前映射关系

在变换CTM之前,我们需要保存图形状态

仿射矩阵来联结CTM?


----------------------------------


quartz guide ————

graphics contexts

path—shapes or subpaths,创建跟绘画是分离的任务。创建各种矢量图形

Color and Color Spaces ----如何翻译颜色

Transforms----CGAffineTransform

patterns--画重复的图形

shadows

transparency layers

bitmap image and image masks

core graphics layer drawing

the identity matrix--单位矩阵




平移矩阵



缩放矩阵


旋转矩阵---逆时针方向



矩阵乘法是不可交换的

Thus we need the extra column containing the constant values.

对另一个矩阵乘以一个矩阵,矩阵的列数必须匹配的行数

这意味着2 x 3矩阵不能乘以2 x 3矩阵。因此我们需要额外的列包含常量值。



----------------------------------


graphics state-----The popped state becomes the current graphics state,在current graphics state

arameters Discussed in this chapter

Current transformation matrix (CTM) Transforms

Clipping area Paths

Line: width, join, cap, dash, miter limit Paths

Accuracy of curve estimation (flatness) Paths

Anti-aliasing setting Graphics Contexts

Color: fill and stroke settings Color and Color Spaces

Alpha value (transparency) Color and Color Spaces

Rendering intent Color and Color Spaces

Color space: fill and stroke settings Color and Color Spaces

Text: font, font size, character spacing, text drawing mode Text

Blend mode Paths and Bitmap Images and Image Masks


----------------------------------

ellipses 椭圆

CGContextAddEllipseInRect-----rect 内画椭圆

curve 曲线

CGContextAddQuadCurveToPoint-----起点,控制点,终点,二次曲线

CGContextAddCurveToPoint-------贝塞尔曲线,三次曲线,两个控制点

arcs 圆弧---两个点的相切线确定一个弧--If the current path already contains a subpath, Quartz appends a straight line segment from the current point to the starting point of the arc. If the current path is empty, Quartz creates a new subpath at the starting point for the arc and does not add the initial straight line segment.

The function CGContextAddArc creates a curved segment from a circle. You specify the center of the circle, the radius, and the radial angle (in radians). You can create a full circle by specifying a radial angle of 2 pi.

(圆心,半径,弧度起点,弧度终点,顺逆时针)

the function CGContextAddArcToPoint is ideal to use when you want to round the corners of a rectangle. Quartz uses the endpoints you supply to create two tangent lines. You also supply the radius of the circle from which Quartz slices the arc. The center point of the arc is the intersection of two radii, each of which is perpendicular to one of the two tangent lines. Each endpoint of the arc is a tangent point on one of the tangent lines

( 切线一从起点至第一个end point , 切线二:从第一个end point 至 第二个 end point , 根据半径画圆 )


----------------------------------

你可能感兴趣的:(Graphics Context)