cocoa - NSImage → NSURL → 自定义对象

标签 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];
    }

最佳答案

引用 BlazingFrog 的话:

(it seems like a reasonable expectation since one can initialize an NSImage from a URL)

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

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

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

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

Quote苹果公司:

An NSImage object manages a group of image representations.

解决方案

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

关于cocoa - NSImage → NSURL → 自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072927/

相关文章:

objective-c - 扩展至列表文件大小?

macos - 在两个轴上翻转 NSImage

ios - 调用 API 时应用程序总是崩溃

objective-c - 绘制透明图像

cocoa - 使用 NSImage 创建并写入调色板 RGBA PNG

objective-c - NSTextView 未将文本绘制到 NSImage 上

objective-c - 为什么 Objective-C 委托(delegate)通常被赋予属性分配而不是保留?

objective-c - 我应该避免创建大量变量吗?

ios - 将 UIImage View 转换为 NSURL 以将其上传到 Firebase

ios - 将自定义标记添加到 xcode 中的 url