On Aug 5, 2010, at 08:45, Brian Postow wrote:
> Given a bunch of bitmap data, and a resolution, how do I create an NSImage
> (or CGImage or CGImageSource) with the correct resolution?
>
> Currently, I'm doing:
>
> CGDataProviderRef provider= CGDataProviderCreateWithData(NULL,
> (UInt8*)data, bytesPerRow * length, NULL);
>
> [...]
>
> NSData* imgData = [NSMutableData data];
> CGImageDestinationRef dest = CGImageDestinationCreateWithData
> (imgData, kUTTypeTIFF, 1, NULL);
> CGImageDestinationAddImage(dest, cgImg, NULL);
> CGImageDestinationFinalize(dest);
> NSImage* img = [[NSImage alloc] initWithData: imgData];
>
>
> now, it appears that CGImageDestination takes only a NULL argument for the
> dictionary.. and width and length are in pixels, not points or inches. At
> what point in this process am I supposed to add the resolution into this
> process?
Yes, the CGImage has no resolution, only a pixel size. So you add in the
resolution at the very end, after creating the NSImage:
img.size = NSMakeSize (widthInPoints, heightInPoints);
where the dimensions in points are computed from the pixel dimensions and the
known resolution.
Actually, after looking at the documentation again, doing it exactly this way
seems slightly risky (if the NSImage is set to do scaling automatically, for
example). I think what you really should do is to create a NSImageRep from the
CGImage, the set the NSImageRep 'size' property to the correct size in points,
then add that image rep to a new "empty" NSImage.
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]