を作成CGDataProvider
し、イメージ バッファーに書き込む代わりに、CG がプロバイダーから必要なデータを要求できるようにします。
CGImage
サイズ 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);
getBytes は次のように定義されます。
size_t getBytes(void *info, void *buffer, size_t count) {
memset(buffer, 0x00, count);
return count;
}
もちろん、他のコールバック ( skipForward
、rewind
、releaseInfo
) を実装し、 に適切な構造体またはオブジェクトを使用する必要がありますinfo
。
詳細については、CGImage および CGDataProvider のリファレンスを確認してください。