views:

2463

answers:

3

I would like to render to an offscreen bitmap (or array of RGBA values) and then blit those to a UIView during in the view's drawRect function. I would prefer to do full 32-bit rendering (including alpha channel), but would also be content with 24-bit rendering.

Would anyone mind pointing me in the right direction with some code snippets or relevant APIs?

Also, I know exactly how to do this using OpenGL - I would just prefer to do this work in Core Graphics itself.

+4  A: 

You can use a CGBitmapContext. You can generate an image from a CGBitmapContext and draw it during your drawRect.

phi
+1  A: 

Use CGDataProviderCreateWithData and CGImageCreate if you don't need the bitmap context and just want the CGImageRef.

+1  A: 

To render into an offscreen context and save it as a CGImageRef:

void *bitmapData = calloc(height, bytesPerLine);
CGContextRef offscreen = CGBitmapContextCreate(..., bitmapData, ...)
// draw stuff into offscreen
CGImageRef image = CGBitmapContextCreateImage(offscreen);
CFRelease(offscreen);
free(bitmapData);

To draw it on the screen:

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawImage(context, rect, image);
}

You could also just save the image in the view's layer's contents property (view.layer.contents = image), or use a UIImageView.

benzado