Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting a CGIImageRef from an NSImage in Cocoa on Mac OS X

I need to get a CGIImageRef from an NSImage. Is there an easy way to do this in Cocoa for Mac OS X?

like image 960
Mike2012 Avatar asked Dec 01 '22 11:12

Mike2012


2 Answers

Pretty hard to miss:

-[NSImage CGImageForProposedRect:context:hints:]

like image 155
Azeem.Butt Avatar answered Dec 06 '22 19:12

Azeem.Butt


If you need to target Mac OS X 10.5 or any other previous release, use the following snippet instead. If you don’t, then NSD’s answer is the right way to go.

CGImageRef CGImageCreateWithNSImage(NSImage *image) {
    NSSize imageSize = [image size];

    CGContextRef bitmapContext = CGBitmapContextCreate(NULL, imageSize.width, imageSize.height, 8, 0, [[NSColorSpace genericRGBColorSpace] CGColorSpace], kCGBitmapByteOrder32Host|kCGImageAlphaPremultipliedFirst);

    [NSGraphicsContext saveGraphicsState];
    [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:bitmapContext flipped:NO]];
    [image drawInRect:NSMakeRect(0, 0, imageSize.width, imageSize.height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
    [NSGraphicsContext restoreGraphicsState];

    CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
    CGContextRelease(bitmapContext);
    return cgImage;
}

If your image comes from a file you may be better off using an image source to load the data directly into a CGImageRef.

like image 32
Ben Stiglitz Avatar answered Dec 06 '22 20:12

Ben Stiglitz