1

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

我想避免在这一点上进行重大更改,所以我想知道是否有任何方法可以获取 NSImage 的 URL(这似乎是一个合理的期望,因为可以从 URL 初始化 NSImage

谢谢。

编辑(答案)

我走了一条略有不同的路线。我没有将粘贴板的内容作为 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];
    }
4

2 回答 2

1

BlazingFrog 引用:

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

假设我NSString使用以下方法初始化 a:

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

我确定无法NSURLNSString.
我很确定这同样适用于NSImage. (实际上,完全确定。)

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

苹果引用

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

解决方案

  1. 将您的“过程”更改为接受NSImage
  2. 将 写入NSImage临时文件并使用该文件路径。
于 2011-11-09T23:46:08.637 回答
1

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

我认为您将不得不修改代码以NSImage直接处理对象。

于 2011-11-10T00:23:59.947 回答