0

我不是想在一个组件上绘图,我只是想创建一个新的上下文(我认为)并吐出一个 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:无效上下文等...

4

3 回答 3

0

您总是根据上下文进行绘制。上下文本身可以链接到显示、位图甚至 PDF。

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

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

如您所见,已经为您创建了上下文,您可以通过调用UIGraphicsGetCurrentContext().

于 2010-07-15T18:00:38.087 回答
0

首先,通过检查CGBitmapContextCreate. IE

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

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

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

于 2010-07-16T22:54:38.540 回答
-2

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

于 2010-07-16T01:10:53.970 回答