add colorspace option to SkBitmap -> CGImageRef utility (patch from nico)



git-svn-id: http://skia.googlecode.com/svn/trunk@666 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp
index 2169bc0..dea443c 100644
--- a/src/utils/mac/SkCreateCGImageRef.cpp
+++ b/src/utils/mac/SkCreateCGImageRef.cpp
@@ -2,8 +2,6 @@
 #include "SkBitmap.h"
 #include "SkColorPriv.h"
 
-extern CGImageRef SkCreateCGImageRef(const SkBitmap&);
-
 static void SkBitmap_ReleaseInfo(void* info, const void* pixelData, size_t size) {
     SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(info);
     delete bitmap;
@@ -74,9 +72,10 @@
 
 #undef HAS_ARGB_SHIFTS
 
-CGImageRef SkCreateCGImageRef(const SkBitmap& bm) {
-    size_t bitsPerComponent;
-    CGBitmapInfo info;
+CGImageRef SkCreateCGImageRefWithColorspace(const SkBitmap& bm,
+                                            CGColorSpaceRef colorSpace) {
+    size_t bitsPerComponent SK_INIT_TO_AVOID_WARNING;
+    CGBitmapInfo info       SK_INIT_TO_AVOID_WARNING;
 
     SkBitmap* bitmap = prepareForImageRef(bm, &bitsPerComponent, &info);
     if (NULL == bitmap) {
@@ -94,12 +93,20 @@
     CGDataProviderRef dataRef = CGDataProviderCreateWithData(bitmap, bitmap->getPixels(), s,
 															 SkBitmap_ReleaseInfo);
 
-    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
+    bool releaseColorSpace = false;
+    if (NULL == colorSpace) {
+        colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
+        releaseColorSpace = true;
+    }
+
     CGImageRef ref = CGImageCreate(w, h, bitsPerComponent,
                                    bitmap->bytesPerPixel() * 8,
-                                   bitmap->rowBytes(), space, info, dataRef,
+                                   bitmap->rowBytes(), colorSpace, info, dataRef,
                                    NULL, false, kCGRenderingIntentDefault);
-    CGColorSpaceRelease(space);
+
+    if (releaseColorSpace) {
+        CGColorSpaceRelease(colorSpace);
+    }
     CGDataProviderRelease(dataRef);
     return ref;
 }