NSData

2009-09-13 14 views
6

से UiImage बनाएं नीचे दिया गया कोड मैंने कॉपी किया है (इस साइट से) और मूल कोड संकलित नहीं होने के बाद से केवल थोड़ा संशोधित किया गया है। मैं किनारे का पता लगाने और रंगों में अंततः सरल परिवर्तन के लिए बाइट सरणी में हेरफेर करना चाहता हूं, लेकिन पहले मैं मूल कोड काम करना चाहता था। वर्तमान में, सिस्टम संकलित और चलाता है। यह स्क्रीन पर एक बुरी तरह से खींचा हाथी प्रदर्शित करता है। जब मैं छवि को छूता हूं, तो यह गायब हो जाता है। छवि के माध्यम से कदम 0x0 के रूप में imageWithData के परिणाम दिखाता है। मैंने इसे एक पीएनजी और बीएमपी दोनों के साथ करने की कोशिश की है और उसी परिणामNSData

मैं क्या गलत कर रहा हूं इसके लिए कोई संकेत?

@interface ImageViewDrawable : UIImageView 

// I am using the following code to initialize this ImageView 
ImageViewDrawable * uiv = [[ImageViewDrawable alloc] initWithImage:[UIImage imageNamed:@"ele.png"] ]; 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // get and work on pixel data 
    NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(self.image.CGImage)); 
    char* bytes =[pixelData bytes]; 

    // Take away the red pixel, assuming 32-bit RGBA 
    for(int i = 0; i < [pixelData length]; i += 4) { 
     bytes[i] = bytes[i]; // red 
     bytes[i+1] = bytes[i+1]; // green 
     bytes[i+2] = bytes[i+2]; // blue 
     bytes[i+3] = bytes[i+3]; // alpha 
    } 

    // convert pixel back to uiiimage 
    NSData* newPixelData = [NSData dataWithBytes:bytes length:[pixelData length]]; 
    char * bytes2 =[pixelData bytes]; 
    UIImage * newImage = [UIImage imageWithData:newPixelData] ; 
    [self setImage: newImage ]; 
} 

उत्तर

4

imageWithData:

ImageViewDrawable के रूप में परिभाषित किया गया है कुछ मनमाने ढंग से डेटा नहीं लेने के लिए और एक RGBA असम्पीडित बनावट के रूप में यह व्याख्या करता है। यह एक डेटा लेता है जिसमें एक मान्यता प्राप्त छवि प्रारूप (जैसे जेपीजी, पीएनजी, या टीआईएफएफ) के बाइट होते हैं, पार्स थोज़ होते हैं और छवियों को उचित रूप से डिकंप्रेस करते हैं।

जो आप चाहते हैं उसे करने के लिए आपको एक CGContext बनाने की आवश्यकता है जो उचित रूप से कॉन्फ़िगर किया गया है (पंक्ति बाइट्स, पिक्सेल प्रारूप, आदि), या तो स्मृति का उपयोग करके जिसे आपने पहले से ही बैकिंग स्टोरेज के रूप में आवंटित किया है, या इसके लिए पूछकर भंडारण और फिर अपने बाइट्स को इसमें कॉपी करना। एक बार ऐसा करने के बाद आप उस संदर्भ से UIImage बनाने की क्षमता सहित सभी CGContext से संबंधित कार्यक्षमता का उपयोग कर सकते हैं।

+1

तो इससे कोई फर्क नहीं पड़ता कि मैं जो डेटा खा रहा हूं वह अनिवार्य रूप से मौजूदा यूआईएममेज से आया है? –

+0

मुझे मेरी समस्या दिखाई देती है। कॉल का यह नेस्टेड सेट - CGDataProviderCopyData (CGImageGetDataProvider()) - डेटा प्रदाता प्राप्त करता है, और उसके बाद बस डेटा कॉपी करता है। जिसका अर्थ है कि मैं सिर्फ पिक्सल प्राप्त कर रहा हूं और मूल छवि से बाकी कॉन्फ़िगरेशन नहीं। तो मुझे उन पिक्सल और सीजी सूचना का उपयोग करके एक छवि को फिर से बनाना होगा जिसे आपने संदर्भित किया है। मदद के लिए फिर से धन्यवाद –

संबंधित मुद्दे