Swift NSImage to CGImage

后端 未结 5 1909
旧时难觅i
旧时难觅i 2020-12-14 03:24

How can I convert a NSImage to CGImage in Swift? In Objective-C I did it like this:

- (CGImageRef)CGImage {
    NSData *imageData = self.TIFFRepresentation;
         


        
相关标签:
5条回答
  • 2020-12-14 03:49

    Swift 3 and 4 version code :-

    if let image = NSImage(named: "Icon"){
        let cgImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil)
    }
    
    0 讨论(0)
  • 2020-12-14 03:54

    Here's what I'm using to convert NSImage to CGImage:

    let image = NSImage(named:"image")
    if let image = image {
        var imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
        let imageRef = image.cgImage(forProposedRect: &imageRect, context: nil, hints: nil)
    }
    
    0 讨论(0)
  • 2020-12-14 03:56

    Ah, I found the solution. It's because in Swift you only the an unmanaged object (I just did not really understand, what this means). But this code now works:

    extension NSImage {
        var CGImage: CGImageRef {
        get {
            let imageData = self.TIFFRepresentation
            let source = CGImageSourceCreateWithData(imageData as CFDataRef, nil).takeUnretainedValue()
            let maskRef = CGImageSourceCreateImageAtIndex(source, UInt(0), nil)
            return maskRef.takeUnretainedValue();
        }
        }
    }
    
    0 讨论(0)
  • 2020-12-14 03:57

    For Swift 4.0, XCode 9.2:

    extension NSImage {
        @objc var CGImage: CGImage? {
           get {
                guard let imageData = self.tiffRepresentation else { return nil }
                guard let sourceData = CGImageSourceCreateWithData(imageData as CFData, nil) else { return nil }
                return CGImageSourceCreateImageAtIndex(sourceData, 0, nil)
           }
        }
    }
    
    0 讨论(0)
  • 2020-12-14 04:11

    A Swift 5 implementation:

    extension NSImage {
        var CGImage: CGImage {
            get {
                let imageData = self.tiffRepresentation!
                let source = CGImageSourceCreateWithData(imageData as CFData, nil).unsafelyUnwrapped
                let maskRef = CGImageSourceCreateImageAtIndex(source, Int(0), nil)
                return maskRef.unsafelyUnwrapped
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题