Включение 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
.]
Ответ 3
Как и у Snow Leopard, вы можете просто попросить изображение создать CGImage для вас, отправив сообщение NSImage a CGImageForProposedRect:context:hints:
.
Ответ 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];