Using CFData can make the above code simpler.
Here is the code.
// raw pixel data memory of 64 * 64 pixel size
UInt8 pixelData[64 * 64 * 3];
// fill the raw pixel buffer with arbitrary gray color for test
for(size_t ui = 0; ui < 64 * 64 * 3; ui++)
pixelData[ui] = 210;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CFDataRef rgbData = CFDataCreate(NULL, pixelData, 64 * 64 * 3);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(rgbData);
CGImageRef rgbImageRef = CGImageCreate(64, 64, 8, 24, 64 * 3, colorspace, kCGBitmapByteOrderDefault, provider, NULL, true, kCGRenderingIntentDefault);
CFRelease(rgbData);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);
// use the created CGImage
CGImageRelease(rgbImageRef);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…