2011-11-09 33 views
1

我的应用程序试图从NSImage对象(来自粘贴板)创建自定义对象,但我的当前进程只接收图像URL。NSImage→NSURL→自定义对象

我想避免在这一点上大的变化,所以我想知道是否有什么办法让一个NSImage中的URL(这似乎是一个合理的预期,因为人们可以initialize an NSImage from a URL

感谢。

EDIT(回答)

我去一个稍微不同的路线。我没有将粘贴板的内容作为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]; 
    } 
+1

+1为性感的Unicode箭头! – 2011-11-10 01:41:41

回答

1

报价由BlazingFrog:

(这似乎是一个合理的预期,因为人们可以从一个URL初始化NSImage中)

可以说,我用初始化NSString

NSString * theString = [NSString initWithContentsOfURL: encoding: error: ]; 

我相信这是不可能检索来自NSString的原始NSURL
我相当肯定这同样适用于NSImage。 (其实,完全可以肯定)。

的确可以用initWithContentsOfURL:来初始化NSImage
但它也可以通过initWithData:initWithPasteboard:进行初始化。
NSURL没有严格要求初始化NSImage
换句话说,NSImage可能在不使用URL的情况下被初始化。
NSImage只是图像表示的容器。

Quote苹果:

一个NSImage中对象管理一组图像表示。

解决方案

  1. 更改你 '过程' 接受NSImage
  2. NSImage写入临时文件并使用该文件路径。
1

如果通过标准粘贴板(即复制/粘贴机制)传送图像,则无法通过URL引用它,因为它可能没有。例如,如果您在Word或Pages中打开文档,选择一个图像并复制它,但没有办法创建该图像的URL引用。它位于粘贴板上,但不在您可以访问的窗体的文件系统中。

我认为你将不得不修改你的代码来直接处理NSImage对象。