使用Core Graphics制作类似画笔的纹理

时间:2011-11-14 05:53:07

标签: objective-c ios cocoa-touch drawing core-graphics

我正在制作一个绘画应用程序,我在制作画笔纹理时遇到了麻烦。 我使用Core Graphics在touchesBegantouchesMoved上绘制一条粗线和圆圈,我希望它具有更平滑的纹理,就像真正的画笔一样。这可能是使用Core Graphics吗?

这是我的代码:

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 35.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 
    redAmt, blueAmt, greenAmt, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(),
    endingPoint.x, endingPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(),
    currentTouch.x, currentTouch.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
touchDraw.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

3 个答案:

答案 0 :(得分:3)

我建议将OpenGL用于绘画应用程序。看看“GLPaint”示例。它正是您在OpenGL中寻找的。 (在CG的帮助下)。如果你只想绘制到屏幕或位图表示,openGL应该更快。

如果您坚持使用CG,您应该创建一个CGLayer,在图层中绘制画笔纹理,然后将图层重复绘制到您图像所在的最终上下文中。

查看CGLayerCreate的文档,CGContextDrawLayerAtPoint。

您需要一些代码,通过在常规间隔中找到该路径上的点然后在这些点处绘制画笔形状来对要绘制的路径进行采样。据我所知,CG中没有这样的函数或方法,所以你必须编写自己的代码。这对于线条来说应该不难,但它涉及bezier或立方路径的一些数学。

答案 1 :(得分:0)

实现画笔工具的简单方法是使用图像并将其重复合成到绘图上下文中。

答案 2 :(得分:0)

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
UIGraphicsBeginImageContext(imageView1.frame.size);
[imageView1.image drawInRect:CGRectMake(0, 0,imageView1.frame.size.width, imageView1.frame.size.height)];
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10);
CGContextSetLineJoin(UIGraphicsGetCurrentContext(), kCGLineJoinRound);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 0, 0, 0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextClearRect (UIGraphicsGetCurrentContext(), CGRectMake(point.x, point.y, 40, 40));
CGContextStrokePath(UIGraphicsGetCurrentContext());
imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();