Вопрос по cocoa-touch, uikit, core-graphics, iphone – Как перевернуть координаты при рисовании в контексте?

10

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

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

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

Ваш Ответ

2   ответа
10

решение как расширение в 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()
    }
}
22

используя что-то похожее на следующее:

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);

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

Мне нужны были только CGContextTranslateCTM и CGContextScaleCTM. Просто вызвал это сразу после UIGraphicsBeginImageContext. Отличная вещь! Thanks

Похожие вопросы