Включение NSImage * в CGImageRef?

Есть ли простой способ сделать это, что работает в 10,5?

В 10.6 я могу использовать nsImage CGImageForProposedRect: NULL context: NULL hints: NULL

Если я не использую черно-белые изображения 1b (например, TIFF группы 4), я могу использовать растровые изображения, но cgbitmaps, похоже, не нравятся этой настройке... Есть ли общий способ сделать это?

Мне нужно сделать это, потому что у меня есть IKImageView, который, кажется, хочет добавить CGImages, но все, что у меня есть, - NSImages. В настоящее время я использую частный метод setImage: (NSImage *), который я ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО не использовал бы...

Ответы

Ответ 1

Найденное решение на этой странице:

NSImage* someImage;
// create the image somehow, load from file, draw into it...
CGImageSourceRef source;

source = CGImageSourceCreateWithData((CFDataRef)[someImage TIFFRepresentation], NULL);
CGImageRef maskRef =  CGImageSourceCreateImageAtIndex(source, 0, NULL);

Все методы кажутся 10.4+, поэтому вы должны быть в порядке.

Ответ 2

[Это длинный путь. Вы должны сделать это только в том случае, если вы по-прежнему поддерживаете старую версию OS X. Если вам может потребоваться 10.6 или новее, просто используйте метод CGImage.]

Ответ 4

Здесь более подробный ответ на использование - CGImageForProposedRect:context:hints::

NSImage *image = [NSImage imageNamed:@"image.jpg"];

NSRect imageRect = NSMakeRect(0, 0, image.size.width, image.size.height);

CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:NULL hints:nil];

Ответ 5

Просто сделал это, используя CGImageForProposedRect:context:hints:...

NSImage *image; // an image
NSGraphicsContext *context = [NSGraphicsContext currentContext];
CGRect imageCGRect = CGRectMake(0, 0, image.size.width, image.size.height);
NSRect imageRect = NSRectFromCGRect(imageCGRect);
CGImageRef imageRef = [image CGImageForProposedRect:&imageRect context:context hints:nil];