我的应用程序正在尝试从 NSImage 对象(来自粘贴板)创建自定义对象,但我当前的进程仅接受图像 URL。
我想避免此时发生重大变化,所以我想知道是否有任何方法可以获取 NSImage 的 URL(这似乎是一个合理的期望,因为可以 initialize an NSImage from a URL )
谢谢。
编辑(答案)
我走了一条稍微不同的路线。我没有将粘贴板的内容作为 NSImage 数组获取,而是将其作为 NSURL 数组获取。然后我可以将它们输入到我的流程中。
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSArray *classArray = [NSArray arrayWithObject:[NSURL class]];
NSDictionary *options = [NSDictionary dictionary];
BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options];
if (ok) {
NSArray *URLs = [pasteboard readObjectsForClasses:classArray options:options];
}
最佳答案
引用 BlazingFrog 的话:
(it seems like a reasonable expectation since one can initialize an NSImage from a URL)
假设我使用以下方法初始化 NSString
:
NSString * theString = [NSString initWithContentsOfURL: encoding: error: ];
我确定不可能从 NSString
检索原始 NSURL
。
我很确定这同样适用于 NSImage。 (实际上,完全确定。)
确实NSImage
可以通过initWithContentsOfURL:
来初始化。
但也可以通过 initWithData:
或 initWithPasteboard:
来初始化。
NSURL
对于初始化 NSImage
没有严格要求。
换句话说,NSImage
可以在不使用 URL 的情况下进行初始化。
NSImage
只是一个图像表示的容器。
Quote苹果公司:
An NSImage object manages a group of image representations.
解决方案
- 更改您的“流程”以接受
NSImage
。 - 将
NSImage
写入临时文件并使用该文件路径。
关于cocoa - NSImage → NSURL → 自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072927/