如何在Qt 6中实现CGImageRef到QPixmap的转换?
在Qt 6中实现CGImageRef到QPixmap的转换
由于Qt 6移除了QtMacExtras模块,原QtMac::fromCGImageRef函数无法再使用,你可以通过Cocoa原生API+Qt的跨平台图像转换接口来实现需求,具体方案如下:
实现思路
先将CGImageRef转换为Cocoa的NSImage,再利用Qt提供的QImage::fromNSImage接口将NSImage转为QImage,最后通过QPixmap::fromImage得到目标QPixmap。
具体代码实现
#include <AppKit/NSImage.h> #include <QtGui/QImage> #include <QtGui/QPixmap> QPixmap cgImageToQPixmap(CGImageRef cgImage) { if (!cgImage) return QPixmap(); // 用CGImageRef创建NSImage NSImage *nsImage = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize]; if (!nsImage) return QPixmap(); // 将NSImage转换为QImage QImage qImage = QImage::fromNSImage(nsImage); [nsImage release]; // 非ARC环境下手动释放内存,ARC环境可省略 // 转换为QPixmap并返回 return QPixmap::fromImage(qImage); }
注意事项
- 确保项目已链接AppKit框架(Qt Creator的macOS项目默认已配置)。
- 若项目使用ARC(自动引用计数),需移除
[nsImage release];语句。 - 该方案会自动适配Retina屏幕,转换后的图像保留正确的像素密度信息。
内容的提问来源于stack exchange,提问作者Bri Bri
相关产品推荐
相关产品推荐

