2009-08-01 8 views
5

नहीं है मैं निम्नलिखित कोड के साथ मेरी छवि घूर्णन कर रहा हूँ:मेरे घुमाया छवि तेज किनारों

CGAffineTransform rotate = CGAffineTransformMakeRotation([ratio floatValue]); 
[imageView setTransform:rotate]; 

लेकिन यह तेज किनारों नहीं है, किसी को इस के लिए एक समाधान पता है?

यहाँ छवि मैं प्राप्त होते हैं:

enter image description here

उत्तर

2

छवि के किनारे खुद को झटकेदार लगते हैं क्योंकि उन्हें सीधे पिक्सेल ग्रिड में रखा जा रहा है, और इंटरपोलेट नहीं किया जा रहा है। Nearest Neighbor Interpolation इंटरपोलेशन का सबसे सरल प्रकार है, जहां आपके पास पिक्सेल ग्रिड ए है और आप अपनी छवि को पिक्सेल ग्रिड बी पर ले जाते हैं, तो ग्रिड बी में पिक्सेल को ग्रिड ए से निकटतम पिक्सेल चुनकर चुना जाता है। इंटरपोलेशन के अन्य रूपों में भारित औसत ग्रिड बी

आपकी छवि, इसके जंजीर किनारों के साथ, यह दिखता है कि यह निकटतम पड़ोसी इंटरपोलेशन का उपयोग कर रहा है, जो एक आईफोन पर एक एफ़िन ट्रांसफॉर्म पर इंटरपोलेशन का डिफ़ॉल्ट प्रकार हो सकता है।

जब आप निकटतम पड़ोसी के अलावा किसी अन्य इंटरपोलेशन योजना का उपयोग करते हैं, तो आपको aliasing प्रभाव मिलेगा, जहां सबसप्लिंग सही नहीं है जब आप एक पिक्सेल ग्रिड से दूसरे में स्थानांतरित करते हैं। उस प्रभाव से छवि में किनारों को स्वयं अन्यथा की तुलना में धुंधला लगता है।

+0

आपकी व्याख्या के लिए धन्यवाद, लेकिन क्या आप जानते हैं कि मैं इसे आईफोन के लिए उद्देश्य सी में कैसे कर सकता हूं। – Ton

+0

शायद CGCterpolationQuality को kCGInterpolationHigh – mmr

+1

पर सेट करने का प्रयास करें क्या आपके पास उस मान को सेट करने के लिए हो पर एक उदाहरण है। मेरे पास सिर्फ एक छवि के साथ मेरी छवि दृश्य है, मुझे पता है। – Ton

1

जब भी आप करना (90 ° वेतन वृद्धि को छोड़कर) एक छवि पर बदल देती है यह थोड़ा नरम पिक्सेल प्रक्षेप के कारण किनारों पैदा करने के लिए जा रहा है।

+0

ओके, लेकिन मुझे नहीं लगता मेरी छवि थोड़ा नरम किनारों है करते हैं, यह वास्तव में बदसूरत लग रहा है !, आप छवि पर एक नज़र डालें और मुझे बताओ कि यदि आप अपने सामान्य सोच सकता है? मैंने अपने प्रश्न में लिंक शामिल किया। – Ton

2

सिर्फ अपनी छवि

CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height); 
UIGraphicsBeginImageContext(imageRect.size); 
[image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)]; 
image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
11

छवि रेस्टराइज़ करने के लिए सबसे अच्छा एंटीलायज़िंग़ प्रदान करेगा UIImageView के CALayer का उपयोग करने के लिए 1px पारदर्शी बॉर्डर जोड़ना।

imageView.layer.shouldRasterize = YES; 
+0

पूरी तरह से काम करता है! धन्यवाद! – DonnaLea

+0

यह मेरे लिए सही काम किया। एक नियमित UIView डब्ल्यू/पृष्ठभूमि रंग पर फिक्स्ड jaggies, कुछ डिग्री घूर्णन। – mattorb