2009-07-17 59 views
9

我创建从一个UIImage的上下文,然后我画成它与如何在上下文中绘制时翻转坐标?

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

的图像出现在石英倒置由于翻转坐标系。我该如何解决这个问题?

回答

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

翻译可能没有必要的图像绘制,但我需要它时,我想画黑底白字。如果这是您在上下文中唯一要做的事情,那么您也可以摆脱保存和恢复上下文状态的调用。

+1

我只需要CGContextTranslateCTM和CGContextScaleCTM。在UIGraphicsBeginImageContext之后立即调用它。很酷的东西! – Thanks 2009-07-18 08:46:50

8

布拉德的solution在斯威夫特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() 
    } 
}