Set CGImage format when converting from QImage.
authorMorten Johan Sorvig <morten.sorvig@digia.com>
Tue, 4 Dec 2012 16:02:59 +0000 (17:02 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 7 Dec 2012 11:06:05 +0000 (12:06 +0100)
Set the CGImage format based on QImage::format().
Handle8-bit per component (A)RGB.

Change-Id: I041b0ee53d3943a0aaf9e813eb0a235c4de619dd
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
src/plugins/platforms/cocoa/qcocoahelpers.mm

index 0d0d2eb..c114661 100644 (file)
@@ -804,13 +804,34 @@ CGImageRef qt_mac_toCGImage(const QImage &qImage, bool isMask, uchar **dataCopy)
         if (!cgColourSpaceRef)
             cgColourSpaceRef = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
 
+        // Create a CGBitmapInfo contiaining the image format.
+        // Support the 8-bit per component (A)RGB formats.
+        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little;
+        switch (qImage.format()) {
+            case QImage::Format_ARGB32_Premultiplied :
+                bitmapInfo |= kCGImageAlphaPremultipliedFirst;
+            break;
+            case QImage::Format_ARGB32 :
+                bitmapInfo |= kCGImageAlphaFirst;
+            break;
+            case QImage::Format_RGB32 :
+                bitmapInfo |= kCGImageAlphaNoneSkipFirst;
+            break;
+            case QImage::Format_RGB888 :
+                bitmapInfo |= kCGImageAlphaNone;
+            break;
+            default:
+                qWarning() << "qt_mac_toCGImage: Unsupported image format" << qImage.format();
+            break;
+        }
+
         cgImage = CGImageCreate(width,
                                 height,
                                 colorBufferSize,
                                 bitDepth,
                                 bytesPrLine,
                                 cgColourSpaceRef,
-                                kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst,
+                                bitmapInfo,
                                 cgDataProviderRef,
                                 NULL,
                                 false,