gpt4 book ai didi

swift - Swift 中来自 CGImageRef 的 NSData

转载 作者:搜寻专家 更新时间:2023-11-01 06:21:09 25 4
gpt4 key购买 nike

我很难弄清楚如何从 CGImageRef 获取图像的 NSData 表示。我找到的所有答案都使用 UIImageNSImage,但我的应用程序是跨平台的,所以我只想使用 Core Graphics。 Objective-C 的回答简单地说明 CFData 是免费桥接到 NSData 并简单地转换它,但 Swift 不允许这样做。我得到的最接近的是:

var image: CGImageRef? = nil

//...
if let dataProvider: CGDataProviderRef = CGDataProviderCreateWithURL(url) {
image = CGImageCreateWithPNGDataProvider(dataProvider, nil, false, CGColorRenderingIntent.RenderingIntentDefault)
// works fine
//...
if let data = CGDataProviderCopyData(CGImageGetDataProvider(image)) as? NSData {
// Do something with data, if only it ever got here!
}
}

但 Actor 永远不会成功......

最佳答案

CGDataProviderCopyData() 返回可选的 CFData?,并且不能转换为非可选的 NSData。但是你可以转换/桥接它到 NSData? 并在可选绑定(bind)中使用它:

if let data = CGDataProviderCopyData(CGImageGetDataProvider(image)) as NSData? {
// Do something with data ...

}

这是一个更简单的示例,演示了与CFStringNSString:

let cfstr : CFString? = "Hello world"
if let nsstr = cfstr as? NSString {
print("foo") // not printed
}
if let nsstr = cfstr as NSString? {
print("bar") // printed
}

但我承认我的解释并不完全令人满意,因为类似的可选 Actor 在其他情况下有效:

class MyClass { }
class MySubclass : MyClass { }

let mc : MyClass? = MySubclass()
if let msc = mc as? MySubclass {
print("yes") // printed
}

所以这一定与 CoreFoundation 之间的免费电话桥接有关和基础类型。

关于swift - Swift 中来自 CGImageRef 的 NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33827885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com