2009-07-17 13 views
9

Creo un contesto da un UIImage, e poi disegnare in esso conCome capovolgere le coordinate quando si disegna nel contesto?

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

l'immagine appare capovolta a causa del sistema di coordinate ruotato in quarzo. Come posso ripararlo?

risposta

22

Dovreste essere in grado di trasformare il contesto utilizzando qualcosa di simile al seguente:

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

La traduzione potrebbe non essere necessaria, per compilare immagine, ma ne avevo bisogno quando ho voluto disegnare il testo invertito. Se questa è l'unica cosa che farai nel contesto, potresti anche essere in grado di sbarazzarti delle chiamate per salvare e ripristinare lo stato del contesto.

+1

Ho solo bisogno CGContextTranslateCTM e CGContextScaleCTM. L'ho appena chiamato subito dopo UIGraphicsBeginImageContext. Roba forte! – Thanks

8

Brad solution come estensione a 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() 
    } 
} 
Problemi correlati