iphone绘图上下文

时间:2010-07-15 13:42:31

标签: iphone drawing cgcontext

我不是试图绘制一个组件,我只是想创建一个新的上下文(我想)并用它上面的绘图内容吐出UIImage。我不是试图利用任何现有的组件。我使用以下代码:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, self.textSize.width, self.textSize.height, 8, 4 * self.textSize.width, 
                                             colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1);
NSString *text = @"Hello world";
[text drawAtPoint:CGPointMake(0, 0) forWidth:maxWidth withFont:font lineBreakMode:UILineBreakModeWordWrap];

CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

UIImage * myRendering = [UIImage imageWithCGImage:imageMasked];

不幸的是我收到了“无效的上下文”错误消息。仅搜索Google似乎会让人们试图利用现有组件。我想吐出一个新的UIImage。

我在这里尝试了创建位图上下文的示例 - http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-SW9

我仍然得到:

:CGContextGetShouldSmoothFonts:无效的上下文 :CGContextSetFont:无效的上下文 :CGContextSetTextMatrix:无效的上下文 :CGContextSetFontSize:无效的上下文 等...

3 个答案:

答案 0 :(得分:0)

您总是在上下文中绘制。上下文本身可以链接到显示,位图甚至PDF。

根据您要实现的目标,您必须创建上下文或使用现有上下文。对于自定义组件(我假设你的意思是因为你提到了JPanel),你只需覆盖UIView的drawRect方法,就像这样。

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();

正如您所看到的,已经为您创建了上下文,您可以通过调用UIGraphicsGetCurrentContext()来获取它。

答案 1 :(得分:0)

首先,通过检查CGBitmapContextCreate的返回值来检查您是否确实创建了上下文。即。

if ( context == NULL ) NSLog(@"glad I always check my return values!");

并检查控制台是否有任何消息。

如果您尚未创建上下文,请检查您是否在iOS 4.0或更高版本上进行开发。如果没有,请不要将NULL作为第一个参数传递,而是将malloc传递给内存。

答案 2 :(得分:-2)

好的问题是我没有把我的位图绘制代码放在viewDidLoad中。我真的不明白这个东西。为什么这么不直观?