Nawet po zastosowaniu wszystko już wspomniałem, mam jeszcze dramaty z obrazami. W końcu, ja tylko używane Gimp aby stworzyć „pionową odbitym” wersję wszystkich moich obrazów. Teraz nie trzeba używać żadnych transformacje. Mam nadzieję, że nie będzie to powodować dalsze problemy w dół toru.
Czy ktoś wie dlaczego CGContextDrawImage byłby rysunek mój obraz do góry nogami? Wczytuję obrazu w mojej aplikacji:
Quartz2d używa innego układu współrzędnych, gdzie pochodzenie jest w lewym dolnym rogu. Tak więc, gdy kwarcowy zwraca pikseli x [5], R [10] 100 * 100 obrazu, że piksel jest przedstawione w lewym dolnym rogu zamiast w lewym górnym rogu. Powodując „odbitym” obraz.
System x koordynować mecze, więc trzeba będzie przerzucić y współrzędne.
CGContextTranslateCTM(context, 0, image.size.height);
Oznacza to, tłumaczyliśmy obraz przez 0 jednostek na osi X i przez wysokość obrazów na osi y. Jednak ta sama oznaczać będzie nasz wizerunek jest jeszcze do góry nogami, tylko wciągnięcia „image.size.height” poniżej, gdzie go chcą być rysowane.
Przewodnik programowania Quartz2D zaleca stosowanie ScaleCTM i przekazywanie wartości ujemne, aby odwrócić obraz. Można użyć następującego kodu, aby to zrobić -
CGContextScaleCTM(context, 1.0, -1.0);
Połączyć dwa tuż przed CGContextDrawImagerozmowy i trzeba mieć obraz sporządzony prawidłowo.
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);
Wystarczy być ostrożnym, jeśli imageRect koordynuje nie zgadzać się z obrazu, jak można dostać niezamierzonych rezultatów.
Aby przekonwertować z powrotem współrzędne:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);