我的应用程序正在尝试从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];
}
答案 0 :(得分:1)
引用BlazingFrog:
(因为可以从URL初始化NSImage,这似乎是一个合理的期望)
假设我使用:
初始化NSString
NSString * theString = [NSString initWithContentsOfURL: encoding: error: ];
我确信无法从NSURL
检索原始NSString
。
而且我很确定这同样适用于NSImage
。 (实际上,完全确定。)
确实可以NSImage
初始化initWithContentsOfURL:
但它也可以initWithData:
或initWithPasteboard:
初始化
初始化NSURL
并非严格要求NSImage
换句话说,可以在不使用URL的情况下初始化NSImage
NSImage
只是图像表示的容器。
NSImage对象管理一组图像表示。
<强>解决方案强>
NSImage
。NSImage
写入临时文件并使用该文件路径。答案 1 :(得分:1)
如果图像是通过标准粘贴板(即复制/粘贴机制)传送的,则无法通过URL引用它,因为它可能没有。例如,如果您在Word或Pages中打开文档,选择一个图像并将其复制,则无法创建对该图像的URL引用。它位于粘贴板上,但不能以您可以访问的形式存在于文件系统中。
我认为您必须修改代码才能直接处理NSImage
个对象。