Lup*_*rus 12 cocoa nsimage swift
如何在Swift中将NSImage转换为CGImage?在Objective-C中,我这样做:
- (CGImageRef)CGImage {
NSData *imageData = self.TIFFRepresentation;
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
CGImageRef maskRef = CGImageSourceCreateImageAtIndex(source, 0, NULL);
return maskRef;
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试了:
extension NSImage {
var CGImage: CGImageRef {
get {
let imageData = self.TIFFRepresentation
let source = CGImageSourceCreateWithData(imageData as CFDataRef, nil)
let maskRef = CGImageSourceCreateImageAtIndex(source, UInt(0), nil)
return maskRef;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我无法编译,我收到错误:Could not find an overload for 'init' that accepts the supplied arguments'在线let maskRef ...
az_*_*az_ 25
这是我用来将NSImage转换为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)
}
Run Code Online (Sandbox Code Playgroud)
啊,我找到了解决方案.这是因为在Swift中你只有一个非托管对象(我只是不太懂,这意味着什么).但是这个代码现在有效:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 3和4版本代码: -
if let image = NSImage(named: "Icon"){
let cgImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11880 次 |
| 最近记录: |