2012-06-14 29 views
0

我有一个NSImage(和它对应的NSData),我需要将该图像设置为桌面。似乎唯一的方法APple提供了设置图像是如何将NSImage或NSData设置为桌面图像?

[NSWorkspace setDesktopImageURL:forScreen:options:error:] 

如何可以从NSImage或NSData转换为NSURL?我这样做是为了保存为imageData:

[imageData writeToFile:@"wallpaper" atomically:NO]; 

但我怎么能得到那个URL,以将其设置为桌面?我无法弄清楚如何获取它保存的URL。

回答

2

要回答正是你问的问题:

[NSURL fileURLWithPath:@"wallpaper"] 

但它更有意义,实际写入传递给NSWorkspace文件相同的URL,就像这样:

NSURL *url = [NSURL fileURLWithPath:@"wallpaper"]; 
[imageData writeToURL:url atomically:NO]; 
[[NSWorkspace sharedWorkspace] setDesktopImageURL:url …]; 

它使选择放置文件的好地方更有意义。作为一个通用规则(即使在软件之外),如果你知道你在什么地方放置什么东西,那么晚点找到它要比只是告诉某人“把它放在某个地方”要容易得多。而你特定的“把它放在某个地方”真的意味着“把它放在当前的工作目录中”,这可能是你没有写入权限的地方,或者用户不想让你混乱的地方,或者它可能已经存在一个名为“壁纸”的文件(或目录),或...

因此,你可能想要调用 - [NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]来获取NSTemporaryDirectory,或使用不同的临时文件API。或者您可能想将其放入应用程序的缓存目录中,而不是临时位置。无论看起来对你有意义。

另外,你可能希望把文件适当延长。而且,不知道你从哪里得到imageData,我不知道你会得到一个可用的图像文件。但这是所有单独的问题。

+0

啊,现在看起来很简单。谢谢!当我用相同的名字保存不同的图像时,它遇到了一些问题,但是我改变了它以保存图像的唯一ID(我已经有了),它的工作很棒。 – user1023127

+0

@ user1023127:我可能会使用其中一个临时文件API,并依靠它来保证唯一的名称,但是如果您已经有了某种唯一的ID,那也可以。 – abarnert