हालांकि आकार फ्लोटिंग पॉइंट इकाइयों में निर्दिष्ट है, वास्तविक छवि हमेशा पिक्सल की एक अभिन्न संख्या है।
जब आप पहलू अनुपात को संरक्षित करने के लिए नए आकार की गणना करते हैं, तो आमतौर पर आपके पास केवल पिक्सेल की पूरी संख्या के रूप में पक्षों में से एक होता है, जबकि अन्य तराजू में कुछ अंश भाग होता है। जब आप उस आय में पुरानी छवि खींचते हैं, तो यह नई छवि को काफी भरता नहीं है। तो आप एक सफेद रेखा के रूप में क्या देखते हैं, ग्राफिक्स सिस्टम का हिस्सा पिक्सेल को प्रतिपादित करने का तरीका है जो भाग छवि, भाग पृष्ठभूमि हैं।
संक्षेप में, आप जो करना चाहते हैं वह काफी संभव नहीं है, इसलिए आपको इसे किसी भी तरह से खराब करना होगा। वहाँ कई संभावनाएं हैं:
स्केल छवि इस तरह के पहलू अनुपात पूरी तरह से संरक्षित नहीं किया गया है कि लेकिन आप गोलाई से अभिन्न मान है, उदाहरण के लिए:
actualWidth = round(imgRatio * actualWidth);
पहलू अनुपात को बनाए रखने, लेकिन क्लिप आंशिक किनारे।
UIGraphicsBeginImageContext(CGSizeMake(floor(actualWidth), floor(actualHeight)));
[image drawInRect:rect];
बस कुछ रंग है कि सफेद से कम स्पष्ट है के साथ पहली पृष्ठभूमि को भरने: यह करने के लिए सबसे आसान तरीका शायद छवि संदर्भ एक छोटे से छोटा करने के लिए है। यह एक डरावना क्लज है, जाहिर है, लेकिन सही परिस्थितियों में प्रभावी हो सकता है, उदाहरण के लिए यदि आप हमेशा काले रंग की पृष्ठभूमि के खिलाफ छवि खींच रहे हैं।
एक अलग टिप्पणी पर, आप return
के बाद कुछ भी फोन नहीं कर सकते, तो अपने अंतिम release
लाइन कुछ नहीं कर रहा है। यह भी ठीक है क्योंकि UIGraphicsGetImageFromCurrentImageContext
से लौटाई गई छवि स्वचालित है - आपको वैसे भी इसे जारी नहीं किया जाना चाहिए।
[resizedImage रिहाई]; एक ऐसी वस्तु को जारी कर रहा है जिसका आपके पास स्वामित्व नहीं है। – MattyG