diff options
author | Morten Johan Sørvig <morten.sorvig@qt.io> | 2016-06-23 11:59:32 +0200 |
---|---|---|
committer | Timur Pocheptsov <timur.pocheptsov@theqtcompany.com> | 2016-08-12 12:33:42 +0000 |
commit | ac899f6d60758fef03ec10850272361bf6a06dcb (patch) | |
tree | c63bbbf7d3b2aa4b8050bbf2f1904d634778e9e9 /src/plugins/platforms/cocoa/qcocoahelpers.mm | |
parent | 033ebfae211b5d6608f152f82beaca5cf445e0fc (diff) |
Cocoa: use QImage::toCGImage()
Keep behavior of converting via Format_ARGB32_Premultiplied
for unsupported formats
Change-Id: I64083a88a99640dde42a0a201ce8ea08affe5259
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoahelpers.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoahelpers.mm | 52 |
1 files changed, 10 insertions, 42 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm index 9b4055d92d..8601e222ec 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.mm +++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm @@ -101,6 +101,16 @@ void *qt_mac_QStringListToNSMutableArrayVoid(const QStringList &list) return result; } +CGImageRef qt_mac_toCGImage(const QImage &inImage) +{ + CGImageRef cgImage = inImage.toCGImage(); + if (cgImage) + return cgImage; + + // Convert image data to a known-good format if the fast conversion fails. + return inImage.convertToFormat(QImage::Format_ARGB32_Premultiplied).toCGImage(); +} + static void qt_mac_deleteImage(void *image, const void *, size_t) { delete static_cast<QImage *>(image); @@ -114,48 +124,6 @@ CGDataProviderRef qt_mac_CGDataProvider(const QImage &image) image.byteCount(), qt_mac_deleteImage); } -CGImageRef qt_mac_toCGImage(const QImage &inImage) -{ - if (inImage.isNull()) - return 0; - - QImage image = inImage; - - uint cgflags = kCGImageAlphaNone; - switch (image.format()) { - case QImage::Format_ARGB32: - cgflags = kCGImageAlphaFirst | kCGBitmapByteOrder32Host; - break; - case QImage::Format_RGB32: - cgflags = kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host; - break; - case QImage::Format_RGB888: - cgflags = kCGImageAlphaNone | kCGBitmapByteOrder32Big; - break; - case QImage::Format_RGBA8888_Premultiplied: - cgflags = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big; - break; - case QImage::Format_RGBA8888: - cgflags = kCGImageAlphaLast | kCGBitmapByteOrder32Big; - break; - case QImage::Format_RGBX8888: - cgflags = kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big; - break; - default: - // Everything not recognized explicitly is converted to ARGB32_Premultiplied. - image = inImage.convertToFormat(QImage::Format_ARGB32_Premultiplied); - // no break; - case QImage::Format_ARGB32_Premultiplied: - cgflags = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host; - break; - } - - QCFType<CGDataProviderRef> dataProvider = qt_mac_CGDataProvider(image); - return CGImageCreate(image.width(), image.height(), 8, 32, - image.bytesPerLine(), - qt_mac_genericColorSpace(), - cgflags, dataProvider, 0, false, kCGRenderingIntentDefault); -} CGImageRef qt_mac_toCGImageMask(const QImage &image) { |