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

Существует ли простой способ сделать это, которое работает в 10,5?

В 10,6 я могу использовать nsImage CGImageForProposedRect: ПУСТОЙ контекст: ПУСТЫЕ подсказки: ПУСТОЙ УКАЗАТЕЛЬ

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

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

15
задан Peter Hosey 30 March 2010 в 23:11
поделиться

2 ответа

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

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

30
ответ дан 30 November 2019 в 23:50
поделиться

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

  1. Create CGBitmapContext.
  2. Создайте NSGraphicsContext для контекста растрового изображения.
  3. Установить контекст графики как текущий контекст.
  4. Нарисуйте изображение.
  5. Создайте CGImage из содержимого контекста растрового изображения.
  6. Освободите контекст растрового изображения.
17
ответ дан 30 November 2019 в 23:50
поделиться