2012-09-14 15 views
16

मैं UIImage की drawInRect: विधि का उपयोग कर छवि खींचने की कोशिश कर रहा हूं। यहां कोड है:यूआईएममेज का ड्रॉ सही: smoothes image

UIImage *image = [UIImage imageNamed:@"OrangeBadge.png"]; 

UIGraphicsBeginImageContext(image.size); 

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

समस्या यह है कि परिणामस्वरूप छवि धुंधली है।

Source image and blurred image

मैं दोनों CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), NO)CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), NO) की कोशिश की है, लेकिन इस समस्या का समाधान नहीं: यहाँ जिसके परिणामस्वरूप छवि (दाईं ओर) स्रोत छवि की तुलना में (बाईं ओर) है।

कोई विचार?

अग्रिम धन्यवाद।

उत्तर

29

यदि आप रेटिना डिवाइस पर विकास कर रहे हैं, तो संभवतः यह समस्या आपके ग्राफिक्स संदर्भ के समाधान से संबंधित है। क्या आप इसके साथ प्रयास करेंगे:

UIGraphicsBeginImageContextWithOptions(size, NO, 2.0f); 

यह रेटिना रिज़ॉल्यूशन को सक्षम करेगा। इसके अलावा, काम करने के लिए आपकी छवि @ 2x रिज़ॉल्यूशन पर उपलब्ध होनी चाहिए।

आप के साथ-साथ गैर रेटिना उपकरणों का समर्थन करना चाहते हैं, तो आप उपयोग कर सकते हैं:

if ([UIScreen instancesRespondToSelector:@selector(scale)]) { 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0f); 
} else { 
    UIGraphicsBeginImageContext(newSize); 
} 
+2

मैं नाव समानता जाँच 'का उपयोग कर ==' सिफारिश नहीं होगा। आपको बस इतना करना है कि स्केल को '0. एफ' पर सेट करें, और ढांचा बाकी की देखभाल करेगा। (देखें http://stackoverflow.com/questions/2765537/how-do-i-use-the-nsstring-draw- कार्यक्षमता-to-create-a-uiimage-from-text) – Mazyod

+1

बहुत बहुत धन्यवाद! यह मुद्दा हल करता है। 'अगर ([यूआईस्क्रीन इंस्टेंस रीस्पॉन्डटोज़र: @ चयनकर्ता (स्केल)])' - आईओएस 3 समर्थन के लिए यह लाइन है? आईओएस 4.0 से शुरू होने वाली 'स्केल' संपत्ति समर्थित है। – tonytony

+0

@Mazyod क्या मैं समझने में सही हूं कि '0.0f' ढांचे को सही पैमाने पर संभाल देगा, भले ही वह सही डिवाइस पर रेटिना या गैर-रेटिना है या नहीं? – Timo