16

I'm trying to get bitmap context with the following code:

GContextRef MyCreateBitmapContext (int pixelsWide, int pixelsHigh)
{
    CGContextRef    context = NULL;
    CGColorSpaceRef colorSpace;
    void *          bitmapData;
    int             bitmapByteCount;
    int             bitmapBytesPerRow;

    bitmapBytesPerRow   = (pixelsWide * 4);                          // 1
    bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);

    colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);// 2
    bitmapData = malloc( bitmapByteCount );                          // 3
    if (bitmapData == NULL)
    {
        fprintf (stderr, "Memory not allocated!");
        return NULL;
    }

    context = CGBitmapContextCreate (bitmapData,                     // 4
                                    pixelsWide,
                                    pixelsHigh,
                                    8,      // bits per component
                                    bitmapBytesPerRow,
                                    colorSpace,
                                    kCGImageAlphaPremultipliedLast);
    if (context== NULL)
    {
        free (bitmapData);                                          // 5
        fprintf (stderr, "Context not created!");
        return NULL;
    }

    CGColorSpaceRelease( colorSpace );                              // 6
    return context;                                                 // 7
}

A warning says:'kCGColorSpaceGenericRGB' is deprecated.

Does this mean that colorSpace is unchangeable? If that is true, we'll be unable to change the color data of any images using colorSpace. And how to process image then?

Bobrovsky
  • 13,789
  • 19
  • 80
  • 130
Chilly Zhong
  • 16,763
  • 23
  • 77
  • 103

1 Answers1

35

The generic color space is deprecated. Instead try;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

Andrew Grant
  • 58,260
  • 22
  • 130
  • 143