NSImage→NSURL→自定义对象

时间:2011-11-09 22:58:16

标签: cocoa nsurl nsimage nspasteboard

我的应用程序正在尝试从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];
    }

2 个答案:

答案 0 :(得分:1)

引用BlazingFrog:

  

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

假设我使用:

初始化NSString
NSString * theString = [NSString initWithContentsOfURL: encoding: error: ];

我确信无法从NSURL检索原始NSString
而且我很确定这同样适用于NSImage。 (实际上,完全确定。)

确实可以NSImage初始化initWithContentsOfURL: 但它也可以initWithData:initWithPasteboard:初始化 初始化NSURL并非严格要求NSImage 换句话说,可以在不使用URL的情况下初始化NSImage NSImage只是图像表示的容器。

Apple的

Quote

  

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

<强>解决方案

  1. 将您的“流程”更改为接受NSImage
  2. NSImage写入临时文件并使用该文件路径。

答案 1 :(得分:1)

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

我认为您必须修改代码才能直接处理NSImage个对象。