Как перевернуть координаты при рисовании в контексте? - PullRequest
10 голосов
/ 18 июля 2009

Я создаю контекст из UIImage, а затем рисую в нем с помощью

CGContextDrawImage(bitmapContext,
                   CGRectMake(0, 0,
                              originalImage.size.width,
                              originalImage.size.height),
                   oImageRef); 

изображение появляется вверх ногами из-за перевернутой системы координат в кварце. Как я могу это исправить?

Ответы [ 2 ]

22 голосов
/ 18 июля 2009

Вы должны быть в состоянии преобразовать контекст, используя что-то похожее на следующее:

CGContextSaveGState(bitmapContext);
CGContextTranslateCTM(bitmapContext, 0.0f, originalImage.size.height);
CGContextScaleCTM(bitmapContext, 1.0f, -1.0f);

// Draw here
CGContextDrawImage(bitmapContext, CGRectMake(0, 0, originalImage.size.width, originalImage.size.height), oImageRef);

CGContextRestoreGState(bitmapContext);

Перевод может не понадобиться для рисования изображения, но он мне понадобился, когда я хотел нарисовать перевернутый текст. Если это единственное, что вы будете делать в контексте, вы также можете избавиться от вызовов, чтобы сохранить и восстановить состояние контекста.

10 голосов
/ 06 сентября 2016

решение Брэда как расширение в Swift 3:

extension CGContext {
    func drawFlipped(image: CGImage, rect: CGRect) {
        saveGState()
        translateBy(x: 0, y: rect.height)
        scaleBy(x: 1, y: -1)
        draw(image, in: rect)
        restoreGState()
    }
}
...