आप CGDataProvider
बना सकते हैं, और एक छवि बफर को लिखने के बजाय सीजी को अपने प्रदाता से आवश्यक डेटा का अनुरोध करने दें।
यहां एक बहुत ही सरल उदाहरण है जो आकार 64x64 का काला CGImage
उत्पन्न करता है।
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 संदर्भ देखें।
स्रोत
2010-02-14 14:13:08
हेक्टेयर। सही नाक मेरे नाक के नीचे सही था। मेरे डेटा को CFData ऑब्जेक्ट में लपेटना और फिर CGDataProviderCreateWithCFData में लपेटना बहुत आसान लगता है। –
@ChrisBecke - क्या आप मुझे और जानकारी दे सकते हैं? मुझे एक ही समस्या है। – Patricia