2010-02-17 55 views
3

我必須做出一個原型應用程序,我在給定文件夾中的文件圖標疊加的小圖像。 比方說,我有一個文件夾/我的文檔/ 有三個文件/MyDocuments/Doc1.rtf /MyDocuments/Doc1.pdf和/MyDocuments/Doc1.jpg 和我有一個形象myicon.png,現在我有疊加在所有這三個文件的文件圖標這一形象myicon.png呈現/我的文檔/如何使用Cocoa將圖像重疊(疊加)在文件圖標上?

我明白,我可以使用NSWorkspace sharedWorkspace的方法來獲取和設置這些文件的文件圖標,但我不知道如何使用圖像myicon.png並將其疊加到這些文件的現有圖標上。

如果有人看見Dropbox的應用程序(dropbox.com),那麼它是類似於你看到你的Dropbox文件夾圖標改變

我相信它會使用NSImage中做的方式,但我不知道如何去做吧。

注意:圖片myicon.png將只佔據這些文件的原始圖標的左上部分,即圖像不應與現有圖標​​完全重疊,但只應佔用左上角的1​​/4部分。

回答

5

Lock focus上的文件圖標,然後draw徽章圖標,然後​​。您可能需要對文件圖標的副本執行此操作,然後掛到未打開的原始文件上。

如果徽章是來與Mac OS X標準的徽章之一,請不要將徽章複製到您的應用程序,稍後即看過時的,如果蘋果都沒有改變它。標準徽章在IconsCore.h中命名;您可以使用NSFileTypeForHFSTypeCode函數將這些類型中的任何一個類型包裝到字符串中,然後將該字符串傳遞給NSWorkspace的iconForFileType:以將標準徽章作爲圖像,從這一點開始您可以執行上述操作。

+0

這聽起來洙簡單,感謝彼得 – Ashish

4

爲補充彼得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];