Превращение NSImage * в CGImageRef?
-
23-09-2019 - |
Вопрос
Есть ли простой способ сделать это, который работает в версии 10.5?
В версии 10.6 я могу использовать NSImage CGImageForProposedRect:НУЛЕВОЙ контекст:НУЛЕВЫЕ подсказки:НОЛЬ
Если я не использую черно-белые изображения размером 1 б (например, Group 4 TIFF), я могу использовать растровые изображения, но cgbitmaps, похоже, не нравится такая настройка...Есть ли общий способ сделать это?
Мне нужно это сделать, потому что у меня есть IKImageView, который, кажется, хочет добавлять только CGImages, но все, что у меня есть, - это NSImages.В настоящее время я использую частный метод setImage: (NSImage *), который я БЫ ДЕЙСТВИТЕЛЬНО предпочел не использовать...
Решение
Нашел следующее решение на эта страница:
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
способ вместо этого.]
Что касается Snow Leopard, вы можете просто попросите изображение создать для вас 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];