Загрузить NSImage в QPixmap или QImage - PullRequest
2 голосов
/ 18 марта 2010

У меня есть указатель NSImage из SDK платформы, и мне нужно загрузить его в класс Qt Qt. Чтобы упростить задачу, я могу создать QImage из CGImageRef, используя QPixmap в качестве промежуточного формата, например так:

CGImageRef myImage = // ... get a CGImageRef somehow.
QImage img = QPixmap::fromMacCGImageRef(myImage).toImage();

Однако я не могу найти способ конвертировать из NSImage в CGImageRef. У нескольких других людей была такая же проблема, но я еще не нашел решение.

Существует метод CGImageForProposedRect, но я не могу заставить его работать. В настоящее время я пытаюсь это (img это мой NSImage ptr):

CGImageRef ir = [img CGImageFirProposedRect:0:0:0];

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

NSImage - это обертка изображений высокого уровня, которая может содержать более одного изображения (миниатюры, различные разрешения, векторные представления и т. Д.) И выполняет много операций кеширования. A CGImage, с другой стороны, является одним простым растровым изображением. * * * * * * * * * * * * * * * * * * * * * * * '* * * * * *' * Так как NSImage намного более богатый объект, нет простого способа конвертировать между ними.

Чтобы получить CGImageRef от NSImage, у вас есть несколько вариантов:

  1. Вручную выберите NSBitmapImageRep из NSImage (используя [img representations]) и получите CGImage из этого.
  2. Настройте графический контекст (CGBitmapContextCreate), нарисуйте в нем изображение и создайте CGImage из этого контекста.
  3. Используйте новый API Snow Leopard для создания CGImage непосредственно из NSImage: [img CGImageForProposedRect:NULL context:nil hints:nil]
0 голосов
/ 17 июня 2012
// Sample to create 16x16 QPixmap with alpha channel using Cocoa

const int width = 16;
const int height = 16;

NSBitmapImageRep * bmp = [[NSBitmapImageRep alloc]
      initWithBitmapDataPlanes:NULL
      pixelsWide:width
      pixelsHigh:height
      bitsPerSample:8
      samplesPerPixel:4
      hasAlpha:YES
      isPlanar:NO
      colorSpaceName:NSDeviceRGBColorSpace
      bitmapFormat:NSAlphaFirstBitmapFormat
      bytesPerRow:0
      bitsPerPixel:0
      ];

  [NSGraphicsContext saveGraphicsState];

  [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:bmp]];

  // assume NSImage nsimage
  [nsimage drawInRect:NSMakeRect(0,0,width,height) fromRect:NSZeroRect operation: NSCompositeSourceOver fraction: 1];

  [NSGraphicsContext restoreGraphicsState];

  QPixmap qpixmap = QPixmap::fromMacCGImageRef([bmp CGImage]);

  [bmp release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...