【问题标题】:NSImage → NSURL → Custom ObjectNSImage → NSURL → 自定义对象
【发布时间】:2011-11-09 22:58:16
【问题描述】:

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

【问题讨论】:

    标签: cocoa nsurl nsimage nspasteboard


    【解决方案1】:

    BlazingFrog 引用:

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

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

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

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

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

    Quote 苹果:

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

    解决方案

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2016-10-08
        • 2011-04-14
        • 1970-01-01
        相关资源
        最近更新 更多