Avoid backing store color space conversions.

We want the Qt backing store to be in the device color
space by default. This will avoid colour space conversions
when blitting it to screen, at the cost of a potential 
loss in color accuracy.

As it turns out, CGColorSpaceCreateDeviceRGB no longer
crates a device color space but rather a generic color
space. (Since 10.4). Create the color space with a system
profile instead.

Accurate color representation needs to be supported
at some point, but this fast path should be the
default.

Change-Id: I7ebb77b36f81f66119d8c2ef464723401ec1d1e8
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
This commit is contained in:
Morten Johan Sorvig 2012-12-04 15:19:27 +01:00 committed by The Qt Project
parent 2f6e967eb7
commit 9650a5aa25

View File

@ -789,7 +789,21 @@ CGImageRef qt_mac_toCGImage(const QImage &qImage, bool isMask, uchar **dataCopy)
NULL,
false);
} else {
CGColorSpaceRef cgColourSpaceRef = CGColorSpaceCreateDeviceRGB();
// Try get a device color space. Using the device color space means
// that the CGImage can be drawn to screen without per-pixel color
// space conversion, at the cost of less color accuracy.
CGColorSpaceRef cgColourSpaceRef = 0;
CMProfileRef sysProfile;
if (CMGetSystemProfile(&sysProfile) == noErr)
{
cgColourSpaceRef = CGColorSpaceCreateWithPlatformColorSpace(sysProfile);
CMCloseProfile(sysProfile);
}
// Fall back to Generic RGB if a profile was not found.
if (!cgColourSpaceRef)
cgColourSpaceRef = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
cgImage = CGImageCreate(width,
height,
colorBufferSize,