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?
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.
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()
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With