আমি উল্লিখিত সমস্ত কিছু প্রয়োগ করার পরেও ছবিগুলির সাথে আমার নাটক ছিল। শেষ পর্যন্ত, আমি আমার সমস্ত চিত্রের একটি 'উল্টানো উল্লম্ব' সংস্করণ তৈরি করতে স্রেফ জিম ব্যবহার করেছি। এখন আমার কোনও ট্রান্সফর্ম ব্যবহার করার দরকার নেই। আশা করি এর ফলে ট্র্যাকটি আরও সমস্যার সৃষ্টি করবে না।
কেউ কি জানেন যে কেন সিজি কনটেক্সটড্রাউইমেজ আমার চিত্রটি উল্টো করে আঁকবে? আমি আমার অ্যাপ্লিকেশন থেকে একটি চিত্র লোড করছি:
কোয়ার্টজ 2 ডি একটি ভিন্ন সমবায় সিস্টেম ব্যবহার করে, যেখানে উত্সটি নীচের বাম কোণে। সুতরাং কোয়ার্টজ যখন 100 * 100 চিত্রের পিক্সেল x [5], y [10] আঁকেন, তখন সেই পিক্সেলটি উপরের বামের পরিবর্তে নীচের বাম কোণে আঁকানো হচ্ছে। সুতরাং 'উল্টানো' ইমেজ কারণ।
এক্স কো-অর্ডিনেট সিস্টেমের সাথে মেলে, তাই আপনার y- সমন্বয়গুলি ফ্লিপ করতে হবে।
CGContextTranslateCTM(context, 0, image.size.height);
এর অর্থ আমরা x অক্ষে 0 টি ইউনিট এবং y অক্ষের উপর চিত্রগুলির উচ্চতা দ্বারা চিত্রটি অনুবাদ করেছি। তবে, একা এটির অর্থ হ'ল আমাদের চিত্রটি এখনও বিপরীত, কেবল "চিত্র.সাইজ.হাইট" আঁকানো হচ্ছে যেখানে আমরা এটি আঁকতে চাই।
কোয়ার্টজ 2 ডি প্রোগ্রামিং গাইডটি স্কেলসিটিএম ব্যবহার এবং চিত্রটি উল্টানোর জন্য নেতিবাচক মানগুলি পাস করার পরামর্শ দেয়। এটি করতে আপনি নীচের কোডটি ব্যবহার করতে পারেন -
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);