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>
bb10
Morten Johan Sørvig 2016-06-23 11:59:32 +02:00 committed by Timur Pocheptsov
parent 033ebfae21
commit ac899f6d60
1 changed files with 10 additions and 42 deletions

View File

@ -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)
{