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

Iphone 在上下文中绘制时如何翻转坐标?,iphone,cocoa-touch,uikit,core-graphics,Iphone,Cocoa Touch,Uikit,Core Graphics,我从UIImage创建一个上下文,然后用 CGContextDrawImage(bitmapContext, CGRectMake(0, 0, originalImage.size.width, originalImage.size.height), oImageRef); 由于石英中的坐标系翻转,

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

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

由于石英中的坐标系翻转,图像出现颠倒。如何解决此问题?

您应该能够使用类似于以下内容的内容转换上下文:

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);
图像绘制可能不需要翻译,但当我想要绘制反转文本时,我需要翻译。如果这是您在上下文中要做的唯一一件事,那么您也可以摆脱保存和恢复上下文状态的调用。

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()
    }
}

我只需要cgcontexttranslatecm和CGContextScaleCTM。刚刚在UIGraphicsBeginImageContext之后调用了它。很酷的东西!