Re: How to detect a Retina Mac
Re: How to detect a Retina Mac
- Subject: Re: How to detect a Retina Mac
- From: Tom Davie <email@hidden>
- Date: Sun, 18 Aug 2013 16:48:18 +0200
On 18 Aug 2013, at 16:27, Simone Tellini <email@hidden> wrote:
>
> Il giorno 18/ago/2013, alle ore 15:03, "Gerriet M. Denkmann" <email@hidden> ha scritto:
>
>> I just noticed that the program I use to create Png files creates files with twice the number of pixels in each dimension.
>> Obviously because since I last used it, I have switched to a Retina Mac Book.
>>
>> Ok, so I have to fix this program.
>>
>
> you can do something like this:
>
> NSSize size = ...;
> NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL
> pixelsWide: size.width
> pixelsHigh: size.height
> bitsPerSample: 8
> samplesPerPixel: 4
> hasAlpha: YES
> isPlanar: NO
> colorSpaceName: NSCalibratedRGBColorSpace
> bitmapFormat: NSAlphaFirstBitmapFormat
> bytesPerRow: 0
> bitsPerPixel: 0];
> NSGraphicsContext *bmCtx;
> NSAffineTransform *transform = [NSAffineTransform transform];
>
> [bitmapRep setSize: size];
>
> bmCtx = [NSGraphicsContext graphicsContextWithBitmapImageRep: bitmapRep];
> bmCtx = [NSGraphicsContext graphicsContextWithGraphicsPort: [bmCtx graphicsPort]
> flipped: YES];
>
> [NSGraphicsContext saveGraphicsState];
> [NSGraphicsContext setCurrentContext: bmCtx];
>
> [transform translateXBy: 0
> yBy: size.height];
> [transform scaleXBy: 1
> yBy: -1];
> [transform set];
>
> ...do some drawing...
>
> [NSGraphicsContext restoreGraphicsState];
>
> data = [bitmapRep representationUsingType: NSPNGFileType properties: nil];
>
> [bitmapRep release];
No need for the complex cocoa to CG manoeuvrings there, this will do fine:
NSSize size = …;
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(NULL, size.width, size.height, 8, 8 * 4 * size.width, rgbColorSpace, kCGBitmapAlphaInfoMask & kCGAlphaLast);
CFRelease(rgbColorSpace);
… do some drawing …
CGImageRef img = CGBitmapContextCreateImage(ctx);
CGContextRelease(ctx);
return [[[NSImage alloc] initWithCGImage:img size:size] autorelease];
Thanks
Tom Davie
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden