यहां तक कि मैंने जो कुछ भी उल्लेख किया है, उसे लागू करने के बाद भी, मैंने अभी भी चित्रों के साथ नाटक किया है। अंत में, मैंने सिर्फ अपनी सभी छवियों का 'फ़्लिप वर्टिकल' संस्करण बनाने के लिए जिम्प का उपयोग किया है। अब मुझे किसी भी ट्रांसफॉर्म का उपयोग करने की आवश्यकता नहीं है। उम्मीद है कि इससे ट्रैक पर और समस्या नहीं होगी।
क्या कोई जानता है कि CGContextDrawImage मेरी छवि को उल्टा क्यों बना रहा होगा? मैं अपने एप्लिकेशन से एक छवि लोड कर रहा हूं:
क्वार्ट्ज 2 डी एक अलग समन्वय प्रणाली का उपयोग करता है, जहां मूल निचले बाएं कोने में है। इसलिए जब क्वार्ट्ज पिक्सेल x [5], y [10] को 100 * 100 की छवि के साथ खींचता है, तो उस पिक्सेल को ऊपरी बाएँ के बजाय निचले बाएँ कोने में खींचा जा रहा है। इस प्रकार 'फ़्लिप' छवि का कारण बना।
एक्स को-ऑर्डिनेट सिस्टम मैच करता है, इसलिए आपको y को-ऑर्डिनेट्स को फ्लिप करना होगा।
CGContextTranslateCTM(context, 0, image.size.height);
इसका मतलब है कि हमने एक्स अक्ष पर 0 इकाइयों द्वारा और y अक्ष पर छवियों की ऊंचाई से छवि का अनुवाद किया है। हालाँकि, इसका अर्थ यह होगा कि हमारी छवि अभी भी उलटी है, बस "image.size.height" को नीचे खींचा जा रहा है जहाँ हम चाहते हैं कि इसे खींचा जाए।
Quartz2D प्रोग्रामिंग गाइड छवि को फ्लिप करने के लिए ScaleCTM का उपयोग करने और नकारात्मक मान पारित करने की सिफारिश करता है। ऐसा करने के लिए आप निम्न कोड का उपयोग कर सकते हैं -
CGContextScaleCTM(context, 1.0, -1.0);
अपने CGContextDrawImage
कॉल से ठीक पहले दोनों को मिलाएं और आपके पास छवि सही ढंग से आनी चाहिए।
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
बस सावधान रहें यदि आपका छवि-निर्देशांक आपकी छवि से मेल नहीं खाता है, क्योंकि आप अनपेक्षित परिणाम प्राप्त कर सकते हैं।
निर्देशांक वापस बदलने के लिए:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);