【问题标题】:Getting a CGIImageRef from an NSImage in Cocoa on Mac OS X在 Mac OS X 上从 Cocoa 中的 NSImage 获取 CGIImageRef
【发布时间】:2010-08-05 04:27:33
【问题描述】:

我需要从 NSImage 获取 CGIImageRef。在 Cocoa for Mac OS X 中是否有一种简单的方法可以做到这一点?

【问题讨论】:

    标签: cocoa macos nsimage


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      如果您需要针对 Mac OS X 10.5 或任何其他先前版本,请改用以下 sn-p。如果您不这样做,那么 NSD 的答案就是正确的方法。

      CGImageRef CGImageCreateWithNSImage(NSImage *image) {
          NSSize imageSize = [image size];
      
          CGContextRef bitmapContext = CGBitmapContextCreate(NULL, imageSize.width, imageSize.height, 8, 0, [[NSColorSpace genericRGBColorSpace] CGColorSpace], kCGBitmapByteOrder32Host|kCGImageAlphaPremultipliedFirst);
      
          [NSGraphicsContext saveGraphicsState];
          [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:bitmapContext flipped:NO]];
          [image drawInRect:NSMakeRect(0, 0, imageSize.width, imageSize.height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
          [NSGraphicsContext restoreGraphicsState];
      
          CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
          CGContextRelease(bitmapContext);
          return cgImage;
      }
      

      如果您的图像来自文件,您最好使用image source 将数据直接加载到 CGImageRef 中。

      【讨论】:

      • 我做了类似的事情来使用来自 bitmapContext 的数据。一个重要的问题:如果你想使用上下文中的数据,你需要在 NSGraphicsContext 上调用 flushGraphics。没有这个,它在调试模式下工作正常,但在发布模式下会出现段错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      相关资源
      最近更新 更多