2009-07-17 5 views
9

tôi tạo ra một bối cảnh từ một UIImage, và sau đó tôi vẽ vào nó vớiLàm thế nào để lật tọa độ khi vẽ trong ngữ cảnh?

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

hình ảnh xuất hiện lộn ngược do hệ thống lật phối hợp thạch anh. Lam sao tôi co thể sửa no?

Trả lời

22

Bạn sẽ có thể chuyển đổi bối cảnh sử dụng một cái gì đó tương tự như sau:

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

Bản dịch có thể không cần thiết cho việc vẽ hình ảnh, nhưng tôi cần nó khi tôi muốn vẽ văn bản đảo ngược. Nếu đây là điều duy nhất bạn sẽ làm trong ngữ cảnh, bạn cũng có thể loại bỏ các cuộc gọi để lưu và khôi phục trạng thái của ngữ cảnh.

+1

Tôi chỉ cần CGContextTranslateCTM và CGContextScaleCTM. Chỉ cần gọi ngay sau UIGraphicsBeginImageContext. Những thứ tuyệt vời! – Thanks

8

Brad solution như một phần mở rộng trong 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() 
    } 
}