4

我必须制作一个原型应用程序,在给定文件夹的文件图标上叠加一个小图像。假设我有一个文件夹 /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 部分。

4

2 回答 2

5

作为对 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];
于 2010-03-31T19:55:07.337 回答
5

将焦点锁定在文件图标上,然后绘制徽章图标,然后解锁焦点。您可能希望对文件图标的副本执行此操作,并保留未标记的原件。

如果徽章是 Mac OS X 附带的标准徽章之一,请不要将徽章复制到您的应用程序中——如果 Apple 更改它,它就会显得过时了。标准徽章在 IconsCore.h 中命名;您可以使用该函数将这些类型中的任何一种包装在一个字符串中NSFileTypeForHFSTypeCode,然后将该字符串传递给 NSWorkspaceiconForFileType:以获取标准徽章作为图像,然后您可以执行上述操作。

于 2010-02-17T14:34:18.783 回答