Даже после применения все, что я уже упоминал, я все еще имел драмы с изображениями. В конце концов, я просто использовал Gimp, чтобы создать «перевернутый вертикальный» вариант всех моих изображений. Теперь мне не нужно использовать какие-либо преображается. Надеюсь, это не будет вызывать дополнительные проблемы вниз по дорожке.
Кто-нибудь знает, почему CGContextDrawImage бы обратил мое изображение вверх ногами? Я загрузка изображения в из моего приложения:
Quartz2d использует другую систему координат, в которой начало координат находится в нижнем левом углу. Поэтому, когда Кварц рисует пиксельные х [5], у [10] 100 * 100 изображений, что пиксель втягивается в нижнем левом углу, а не в верхнем левом углу. Таким образом, в результате чего «перевернутый» изображения.
Система х координатная соответствует, так что вам нужно будет перевернуть Y координаты.
CGContextTranslateCTM(context, 0, image.size.height);
Это означает, что мы перевели изображение на 0 единиц по оси х и высоты изображения по оси у. Тем не менее, это само по себе будет означать наше изображение по-прежнему с ног на голову, только втягиваются «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);