How to flip coordinates when drawing in context?

人走茶凉 提交于 2020-01-01 02:41:06

问题


I create a context from an UIImage, and then I draw into it with

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

the image appears upside-down due to the flipped coordinate system in quartz. How can I fix that?


回答1:


You should be able to transform the context using something similar to the following:

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

The translation may not be necessary for the image drawing, but I needed it when I wanted to draw inverted text. If this is the only thing you'll be doing in the context, you might also be able to get rid of the calls to save and restore the context's state.




回答2:


Brad's solution as an extension in 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()
    }
}


来源:https://stackoverflow.com/questions/1145595/how-to-flip-coordinates-when-drawing-in-context

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!