Превращение NSImage * в CGImageRef? - PullRequest
15 голосов
/ 30 марта 2010

Есть ли простой способ сделать это, который работает в 10.5?

В 10.6 я могу использовать nsImage CGImageForProposedRect: NULL контекст: NULL подсказки: NULL

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

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

Ответы [ 5 ]

28 голосов
/ 31 марта 2010

На следующей странице найдено следующее решение :

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+, так что с тобой все будет в порядке.

17 голосов
/ 31 марта 2010

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

  1. Создание CGBitmapContext.
  2. Создать NSGraphicsContext для контекста растрового изображения.
  3. Установить графический контекст в качестве текущего контекста.
  4. Нарисуйте изображение.
  5. Создать CGImage из содержимого контекста растрового изображения.
  6. Освободить растровый контекст.
16 голосов
/ 30 июля 2012

Что касается Snow Leopard, вы можете просто попросить изображение создать CGImage для вас , отправив NSImage сообщение CGImageForProposedRect:context:hints:.

14 голосов
/ 24 марта 2015

Вот более подробный ответ для использования - 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];
1 голос
/ 25 июля 2015

Только что сделал это, используя 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];
...