2009-08-10 12 views
7

मुझे एहसास है कि यह एक आसान काम नहीं है, लेकिन मुझे इसके ऊपर झूठ बोलने वाले एक और यूआईएममेज व्यू के साथ UIImageView को गठबंधन या फ़्लैट करना होगा। उदाहरण के लिए: मेरे पास दो UIImageViews हैं। उनमें से एक घास के मैदान (1200 x 1200 पिक्सल) का UIImage है। दूसरा बास्केटबॉल (128 x 128 पिक्सल) का यूआईएममेज है, और यह घास के मैदान की छवि से ऊपर स्थित है जिससे बास्केटबॉल घास के मैदान पर दिखाई देता है। मैं अपने फोटो एलबम में एक छवि छवि के रूप में अतिरंजित UIImageViews को सहेजने में सक्षम होना चाहता हूं जिसका अर्थ है कि मुझे किसी भी तरह दो छवियों को गठबंधन करने की आवश्यकता होगी। यह कैसे पूरा किया जाएगा? (नोट: एक स्क्रीनशॉट ले रहा है (320 x 480 पिक्सल) नहीं एक स्वीकार्य समाधान के रूप में मैं 1200 x 1600 पिक्सल के आकार को संरक्षित करना चाहते हो सकता हैएकाधिक UIImageViews को 'फ़्लैटन' कैसे करें?

प्रश्न:।
कैसे मैं एक और बचाने में एकाधिक UIImageViews समतल कर सकते हैं आकार/संकल्प को संरक्षित करते समय परिणामी छवि।

उत्तर

3

यह कोई विचार लेता है और इसमें से एक यूआईएममेज बनाता है। किसी भी दृश्य और इसके सबव्यूज को UIImage में "फ़्लैटन" किया जाएगा जिसे आप डिस्क पर प्रदर्शित या सहेज सकते हैं।

- (UIImage*)imageFromView{ 

    UIImage *image; 

    UIGraphicsBeginImageContext(self.view.bounds.size); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 

} 
+0

वैसे, कोरी, यह देखने के लिए एक तरीका है (आपके उपरोक्त कोड) जबकि उस दृश्य के छवि रिज़ॉल्यूशन को संरक्षित करना जो आधार परत है (आपके कोड में self.view.layer)? मेरे पास 1200 x 1600 का आकार है, लेकिन प्रसंस्करण के बाद (आपके कोड का उपयोग करके) परिणामी छवि में UIImageView का पिक्सेल आकार है जो इसके कंटेनर (320 x 427) था। – RexOnRoids

+0

मैं निश्चित रूप से नहीं कह सकता, लेकिन tequilatango द्वारा उपयोग की जाने वाली रणनीति इसे पूरा करने के लिए प्रतीत होती है। जिस विधि का मैं उपयोग करता हूं वह केवल स्क्रीन रिज़ॉल्यूशन पर स्क्रीन पर कैप्चर करेगा। यह तेज़ और गंदा है, लेकिन काम करता है। यदि आपको बेहतर परिणाम चाहिए, तो आपको छवि को बफर में खींचने की आवश्यकता होगी जैसा कि उसने दिखाया था। बेशक, चूंकि यह आईफोन है, यदि यूएक्स को प्रभावित किए बिना आपकी छवियों के आकार को कम करने का कोई तरीका है तो आप इसे स्मृति/प्रदर्शन कारणों के लिए विचार करना चाहेंगे। –

+0

छवि संकल्प को रखने के लिए बस 'UIGraphicsBeginImageContextWithOptions (self.view.bounds.size, NO, 0.0) का उपयोग करें। –

5

आप मूल यूआईएममेज को एक दूसरे के शीर्ष पर पृष्ठभूमि बफर में क्यों नहीं खींचते हैं और फिर एक फ़ाइल में एक संयुक्त छवि लिखते हैं? नीचे एक उदाहरण है कि आप कैसे कर सकते हैं दो छवियों को एक ही बफर में खींचें:

CGImageRef bgimage = [bguiimage CGImage]; 
width = CGImageGetWidth(bgimage); 
height = CGImageGetHeight(bgimage); 

// Create a temporary texture data buffer 
GLUbyte* data = (GLubyte *) malloc(width * height * 4); 
assert(data); 

// Draw image to buffer 
CGContextRef ctx = CGBitmapContextCreate(data, width, height, 8, width * 4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast); 
assert(ctx); 

// Flip image upside-down because OpenGL coordinates differ 
CGContextTranslateCTM(ctx, 0, height); 
CGContextScaleCTM(ctx, 1.0, -1.0); 

CGContextDrawImage(ctx, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), bgimage); 

CGImageRef ballimage = [balluiimage CGImage]; 
bwidth = CGImageGetWidth(ballimage); 
bheight = CGImageGetHeight(ballimage); 

float x = (width - bwidth)/2.0; 
float y = (height - bheight)/2.0; 
CGContextDrawImage(ctx, CGRectMake(x, y, (CGFloat)bwidth, (CGFloat)bheight), ballimage); 

CGContextRelease(ctx); 
+0

इस सुझाव के लिए धन्यवाद। क्या यह मूल छवियों के संकल्प/पिक्सल को संरक्षित करता है या क्या वे समान आकार वाले होते हैं जो उन्हें पकड़ते हैं? – RexOnRoids

+0

यह संकल्प को संरक्षित करता है, क्योंकि आप मूल छवि खींचते हैं। –

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