我必须制作一个原型应用程序,我在给定文件夹的文件图标上叠加一个小图像。 假设我有一个文件夹/ MyDocuments / 并且有三个文件/MyDocuments/Doc1.rtf /MyDocuments/Doc1.pdf和/MyDocuments/Doc1.jpg 我有一个图像 myicon.png ,现在我必须将此图像myicon.png叠加在/ MyDocuments /
中存在的所有三个文件的文件图标上据我所知,我可以使用 NSWorkspace sharedWorkspace 中的方法来获取和设置这些文件的文件图标,但我不知道如何使用图像 myicon.png 并将其叠加在这些文件的现有图标上。
如果有人看过Dropbox应用程序(dropbox.com),那么它与您在Dropbox文件夹中看到更改图标的方式类似
我认为它将使用NSImage完成,但我不知道该怎么做。
注意:图像myicon.png只会占据这些文件原始图标的左上角部分,即图像不应与现有图标完全重叠,但只应占用左上角的1/4部分。
答案 0 :(得分:5)
Lock focus在文件图标上,然后draw徽章图标,然后是unlock focus。您可能希望对文件图标的副本执行此操作,并将其挂在未加载的原始文件上。
如果徽章是Mac OS X附带的标准徽章之一,请不要将徽章复制到您的应用中 - 如果Apple更改徽章,它将会过时。标准徽章在IconsCore.h中命名;你可以使用NSFileTypeForHFSTypeCode
函数将任何这些类型包装在一个字符串中,然后将该字符串传递给NSWorkspace的iconForFileType:
以获得标准徽章作为图像,从这一点你可以做到这一点。
答案 1 :(得分:4)
作为Peter Hosey答案的补充,这里有一些稍微修改过的示例代码:
http://cocoadev.com/forums/comments.php?DiscussionID=221
NSImage *origImage = [sourceImage copy]; // Copy to avoid modifying the original.
NSSize previewSize = NSMakeSize([origImage size].width / 4.0, [origImage size].height / 4.0);
NSImage *previewImage = [[NSImage alloc] initWithSize:previewSize];
[previewImage lockFocus];
[origImage drawInRect:NSMakeRect(0, 0, previewSize.width, previewSize.height)
fromRect:NSZeroRect // Draws full image.
operation:NSCompositeSourceOver
fraction:1.0];
[previewImage unlockFocus];