我不是试图绘制一个组件,我只是想创建一个新的上下文(我想)并用它上面的绘图内容吐出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:无效的上下文 等...
答案 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中。我真的不明白这个东西。为什么这么不直观?