Puede crear un CGDataProvider
y dejar que CG solicite los datos necesarios de su proveedor, en lugar de escribir en un búfer de imagen.
Aquí hay un ejemplo muy simple que genera un CGImage
negro de tamaño 64x64.
CGDataProviderSequentialCallbacks callbacks;
callbacks.getBytes = getBytes;
CGDataProviderRef provider = CGDataProviderCreateSequential(NULL, &callbacks);
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGImageRef img = CGImageCreate(64, // width
64, // height
8, // bitsPerComponent
24, // bitsPerPixel
64*3, // bytesPerRow
space, // colorspace
kCGBitmapByteOrderDefault, // bitmapInfo
provider, // CGDataProvider
NULL, // decode array
NO, // shouldInterpolate
kCGRenderingIntentDefault); // intent
CGColorSpaceRelease(space);
CGDataProviderRelease(provider);
// use the created CGImage
CGImageRelease(img);
y getBytes se define así:
size_t getBytes(void *info, void *buffer, size_t count) {
memset(buffer, 0x00, count);
return count;
}
por supuesto, tendrá que poner en práctica las otras devoluciones de llamada (skipForward
, rewind
, releaseInfo
), y el uso de una estructura u objeto adecuado para info
. Para obtener más información, consulte las referencias CGImage y CGDataProvider.
ha. la función correcta estaba justo debajo de mi nariz. Parece bastante simple envolver mis datos en un objeto CFData, y luego CGDataProviderCreateWithCFData. –
@ChrisBecke - ¿Me puede dar más información? Estoy teniendo un problema similar. – Patricia