c++ - 将 NSImage 加载到 QPixmap 或 QImage

标签 c++ macos qt graphics

我有一个来自平台 SDK 的 NSImage 指针,我需要将它加载到 Qt 的 QImage 类中。为了简化操作,我可以使用 QPixmap 作为中间格式从 CGImageRef 创建 QImage,如下所示:

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

但是,我找不到将 NSImage 转换为 CGImageRef 的方法。 Several other people遇到了同样的问题,但我还没有找到解决方案。

CGImageForProposedRect方法,但我似乎无法让它工作。我目前正在尝试这个(img 是我的 NSImage ptr):

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

有什么想法吗?

最佳答案

NSImage 是一个高级图像包装器,它可能包含多个图像(缩略图、不同的分辨率、 vector 表示,...)并执行大量缓存操作。另一方面,CGImage 是一个普通的位图图像。由于 NSImage 是一个非常丰富的对象,因此没有简单的方法在两者之间进行转换。

要从 NSImage 获取 CGImageRef,您有一些选择:

  1. NSImage 中手动选择一个 NSBitmapImageRep(使用 [img representations])并从中获取 CGImage
  2. 设置图形上下文 (CGBitmapContextCreate),将图像绘制到其中,并从该上下文创建一个 CGImage
  3. 使用新的 Snow Leopard API 直接从 NSImage 创建 CGImage:[img CGImageForProposedRect:NULL context:nil hints:nil]

关于c++ - 将 NSImage 加载到 QPixmap 或 QImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2468811/

相关文章:

objective-c - 10.6 (Snow Leopard) 之后以编程方式设置 Mac OS X 音量

macos - 有没有一种简单的方法来测量我的 Mac 应用程序的 FPS?

java - 错误: "UnsatisfedLinkError: com.aparapi.internal.jni.OPENCLJNI.getPlatforms()" JNI configuration

c++ - Qt 将数据从 form1 发送到 form2 TreeView 组件

python - 无法在场景中正确定位 QGraphicsRectItem

c++ - 快速实现大型整数计数器(在C/C++中)

c++ - Typedef 到 C++ 中的周围类型

C++ 类型转换 int 到 union

c++ - QCommandLineOption 无法获取选项

c++ - hash_map 和 map 哪个更快?少于 10000 件