मैं एक uiimage से छवि डेटा पुनर्प्राप्त करने, इसे संशोधित करने, और इससे एक नया UIui बनाने का प्रयास कर रहा हूं। शुरू करने के लिए, मैंने बस मूलभूत जानकारी प्राप्त करने के लिए किसी भी संशोधन के बिना डेटा की प्रतिलिपि बनाने की कोशिश की - लेकिन यह विफल रहता है (UIImage +imageWithData:
शून्य देता है)। क्या कोई देख सकता है कि यह क्यों काम नहीं करेगा?छवि का उपयोग करके किसी अन्य यूआईएममेज से यूआईएममेज बनाना, विथडाटा रिटर्न शून्य
// I've confirmed that the follow line works
UIImage *image = [UIImage imageNamed:@"image_foo.png"];
// Get a reference to the data, appears to work
CFDataRef dataRef = CGDataProviderCopyData(CGImageGetDataProvider([image CGImage]));
// Get the length of memory to allocate, seems to work (e.g. 190000)
int length = CFDataGetLength(dataRef) * sizeof(UInt8);
UInt8 * buff = malloc(length);
// Again, appears to work
CFDataGetBytes(dataRef, CFRangeMake(0,length),buff);
// Again, appears to work
NSData * newData = [NSData dataWithBytesNoCopy:buff length:length];
// This fails by returning nil
UIImage *image2 = [UIImage imageWithData:newData];
नोट:
मैं भी उपयोग करने की कोशिश:
UInt8 * डेटा = CFDataGetBytePtr (dataRef);
और बस सीधे एनएसडीटा में पाइपिंग।
वही परिणाम।
क्यों DataWithBytesNoCopy? – jsicary
डेटाविथबाइट्सको कॉपी का उपयोग किया गया क्योंकि उसने बफर को मॉलोक का उपयोग करके आवंटित किया था। इस तरह के ऑब्जेक्ट के पूरे जीवनकाल के दौरान उसे छवि 2 के वास्तविक छवि-बफर तक पहुंच होगी। – Till