在上下文中绘图时如何翻转坐标?

Tha*_*nks 10 iphone cocoa-touch core-graphics uikit

我从UIImage创建一个上下文,然后我用它绘制它

CGContextDrawImage(bitmapContext,
                   CGRectMake(0, 0,
                              originalImage.size.width,
                              originalImage.size.height),
                   oImageRef); 
Run Code Online (Sandbox Code Playgroud)

由于石英中的翻转坐标系,图像呈现倒置.我该如何解决这个问题?

Bra*_*son 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);
Run Code Online (Sandbox Code Playgroud)

图像绘制可能不需要翻译,但是当我想绘制反转文本时我需要它.如果这是您在上下文中唯一要做的事情,那么您也可以摆脱保存和恢复上下文状态的调用.


use*_*478 10

Brad的解决方案作为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()
    }
}
Run Code Online (Sandbox Code Playgroud)