2012-02-25 22 views
11

मुझे छवियों को एक कैलियर में खींचने की आवश्यकता है क्योंकि मुझे इसके विभिन्न प्रभाव, एनिमेशन और फ़िल्टर करने की आवश्यकता है। जब मैं CGContext में सरल ड्राइंग करता हूं, इससे कोई फर्क नहीं पड़ता कि मैं हमेशा क्या करता हूं इसे हमेशा पिक्सेललेट किया जाता है ... रेटिना में किसी संदर्भ पर आकर्षित करने का सही तरीका क्या है?रेटिना में CGContextDrawImage छवि pixelated खींचता है?

CGImageRef plateImage = [[UIImage imageNamed:@"someImage"] CGImage]; 
CGFloat width = CGImageGetWidth(plateImage), height = CGImageGetHeight(plateImage); 
CGFloat scale = [[UIScreen mainScreen] scale]; 

NSLog(@"Scale: %f\nWidth: %f\nHeight: %f", scale, width, height); 
CGContextTranslateCTM(_context, 0, height/scale); 
CGContextScaleCTM(_context, 1.0, -1.0); 

CGContextDrawImage(_context, CGRectMake(0, 0, width/scale, height/scale), plateImage); 

उत्तर

18

आप उचित रूप से परत की सामग्री पैमाने निर्धारित करने की आवश्यकता:

यह अब मैं क्या कर रहा है।

myLayer.contentsScale = [UIScreen mainScreen].scale 
+0

आआआ! मैं सीजी दस्तावेज़ों में हर जगह देख रहा था - एक मिनट के लिए नहीं सोचा था कि यह एक परत मुद्दा था! धन्यवाद! – shein

+0

कमाल। धन्यवाद। – darkheartfelt

23

मुझे एक ही समस्या थी लेकिन समाधान काम नहीं कर रहा था।

UIGraphicsBeginImageContext() मेरी समस्या का कारण बन गया। मैं भविष्य में उपयोगकर्ताओं के लिए एक ही समस्या के साथ अपना समाधान पोस्ट कर रहा हूं।

iOS 4.0 से आप का उपयोग करना चाहिए:

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

बजाय

UIGraphicsBeginImageContext(size); 

की आप pixelated छवियों नहीं करना चाहते हैं।

+0

धन्यवाद! मैं नहीं कह सकता कि मैं समझता हूं कि यह क्यों काम करता है, लेकिन यह करता है। – anonymouse

+2

यह सही जवाब होना चाहिए! – Fydo

+2

यह ध्यान देने योग्य है कि मेरे पास स्वीकार्य उत्तर के साथ संयोजन का सर्वोत्तम परिणाम था: 'UIGraphicsBeginImageContextWithOptions (छवि आकार, नहीं, [यूआईस्क्रीन मुख्यस्क्रीन]। स्केल); ' – bplattenburg