यहां तक कि सब कुछ मैं उल्लेख किया है लागू करने के बाद, मैं अभी भी छवियों के साथ नाटक किया है। अंत में, मैं सिर्फ एक 'फ़्लिप ऊर्ध्वाधर' मेरे सभी छवियों के संस्करण बनाने के लिए Gimp का उपयोग किया है। अब मैं किसी भी Transforms उपयोग करने की आवश्यकता नहीं है। उम्मीद है कि इस ट्रैक नीचे आगे समस्याओं का कारण नहीं होगा।
क्या किसी को पता है कि क्यों CGContextDrawImage उल्टा मेरी छवि ड्राइंग किया जाएगा? मैं अपने आवेदन से में एक छवि लोड हो रहा है कर रहा हूँ:
Quartz2d एक अलग समन्वय प्रणाली है, जहां मूल निचले बाएँ कोने में है का उपयोग करता है। तो जब क्वार्ट्ज ड्रॉ पिक्सेल एक्स [5], वाई [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);
बस सावधान यदि आपका imageRect समन्वय, अपनी छवि के विवरणों से मेल नहीं के रूप में आप अनायास ही परिणाम प्राप्त कर सकते हो।
वापस निर्देशांक बदलने के लिए:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);