How to convert NSImage to NSBitmapImageRep? I have code:
- (NSBitmapImageRep *)bitmapImageRepresentation
{
NSBitmapImageRep *ret = (NSBitmapImageRep *)[self
@Julius: Your code is way too complicated and contains several bugs. I will make a correction for only the first lines:
- (NSBitmapImageRep *)bitmapImageRepresentation
{
for( NSImageRep *rep in [self representations] )
if( [rep isKindOfClass:[NSBitmapImageRep class]] ) return rep;
return nil;
}
This will extract the first NSBitmapImageRep
if it is member in the representations or will return nil, if there is no NSBitmapImageRep
. I'll give you another solution which will always work whatever NSImageReps
are in the representations: NSBitmapImageRep
, NSPDFImageRep
or NSCGImageSnapshotRep
or ...
- (NSBitmapImageRep *)bitmapImageRepresentation
{
CGImageRef CGImage = [self CGImageForProposedRect:nil context:nil hints:nil];
return [[[NSBitmapImageRep alloc] initWithCGImage:CGImage] autorelease];
}
Or to avoid subclassing of NSImage you may write:
NSImage *img = [[[NSImage alloc] initWithContentsOfFile:filename] autorelease];
CGImageRef CGImage = [img CGImageForProposedRect:nil context:nil hints:nil];
NSBitmapImageRep *rep = [[[NSBitmapImageRep alloc] initWithCGImage:CGImage] autorelease];
This will only return a single NSBitmapImageRep
which maybe not good enough if the image contains more than one representation (e.g. a lot of NSBitmapImageRep
s from TIFF files). But adding some code is straightforward.