2010-02-17 6 views
3

Je dois faire une application prototype où je superpose une petite image sur les icônes de fichier d'un dossier donné. Disons que j'ai un dossier/MyDocuments/ et il y a de /MyDocuments/Doc1.pdf trois fichiers et /MyDocuments/Doc1.jpg et j'ai une image myicon.png, maintenant je de superposer cette myicon.png d'image sur les icônes de fichiers de tous les trois fichiers présents dans/MyDocuments/Comment superposer (superposer) une image sur une icône de fichier en utilisant Cocoa?

Je comprends que je peux utiliser les méthodes NSWorkspace SharedWorkspace pour obtenir et définir les icônes de fichier pour ces fichiers, mais Je n'ai aucune idée de comment utiliser l'image myicon.png et de le superposer sur les icônes existantes de ces fichiers.

Si quelqu'un a vu l'application Dropbox (dropbox.com), il est similaire à la façon dont vous voyez les icônes changé dans votre dossier Dropbox

Je suppose que ce serait fait à l'aide NSImage mais je ne sais pas comment pour le faire. Remarque: l'image myicon.png occupera uniquement la partie supérieure gauche de l'icône d'origine de ces fichiers, c'est-à-dire que l'image ne doit pas chevaucher complètement les icônes existantes, mais seulement la 1/4ème partie en haut à gauche doit être occupée .

Répondre

5

Lock focus sur l'icône du fichier, puis draw l'icône du badge, puis unlock focus. Vous souhaiterez peut-être faire cela à une copie de l'icône du fichier et vous accrocher à l'original non importé. Si le badge est l'un des badges standards fournis avec Mac OS X, ne copiez pas le badge dans votre application; il semblera obsolète si Apple le modifie un jour. Les badges standard sont nommés dans IconsCore.h; vous pouvez envelopper n'importe lequel de ces types dans une chaîne en utilisant la fonction NSFileTypeForHFSTypeCode, puis passer cette chaîne à iconForFileType: de NSWorkspace pour obtenir le badge standard en tant qu'image, à partir de quel point vous pouvez faire ce qui précède.

+0

Cela semble soo simple, merci Peter – Ashish

4

En complément à la réponse de Peter Hosey, voici quelques exemples de code légèrement modifié de:

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]; 
Questions connexes