代码之家  ›  专栏  ›  技术社区  ›  Mike S Andreas Köberle

iphone绘图上下文

  •  0
  • Mike S Andreas Köberle  · 技术社区  · 16 年前

    我并不是试图在一个组件上画图,我只是试图创建一个新的上下文(我认为),并吐出一个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];
    

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

    我仍然得到:

    :cgcContextGetShouldSmoothFonts:无效的上下文 :CGContextSetFont:无效的上下文 :CGContextSetFontSize:无效的上下文

    3 回复  |  直到 11 年前
        1
  •  0
  •   sliver    16 年前

    你总是根据上下文作画。上下文本身可以链接到显示器、位图甚至PDF。

    根据你想要达到的目标,你必须创建一个上下文或者使用一个已有的上下文。对于自定义组件(我假设您的意思是因为您提到了一个JPanel),您只需重写UIView的drawRect方法,如下所示。

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

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

        2
  •  0
  •   mvds    16 年前

    首先,通过检查 CGBitmapContextCreate . 即

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

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

    如果您还没有创建上下文,请检查您是在iOS4.0或更高版本上开发。如果不是,不要传递NULL作为第一个参数,但是 malloc

        3
  •  -2
  •   Mike S Andreas Köberle    16 年前