Превращение NSImage* в CGImageRef?

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

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

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

Мне нужно это сделать, потому что у меня есть IKImageView, который, кажется, только хочет добавить CGImages, но все, что у меня есть, это NSImages. В настоящее время я использование частного метода setImage: (NSImage*), который я действительно не хотел бы использовать...

5 ответов


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

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+, поэтому вы должны быть в порядке.


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

  1. создайте CGBitmapContext.
  2. создайте NSGraphicsContext для растрового контекста.
  3. установить графический контекст в качестве текущего контекста.
  4. нарисовать изображение.
  5. создайте CGImage из содержимого контекста растрового изображения.
  6. релиз растрового контекста.

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


вот более подробный ответ на использование - 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];

просто сделал это с помощью 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];