2010-02-17 2 views
3

Мне нужно создать приложение-прототип, где я накладываю небольшое изображение на значки файлов данной папки. Скажем, у меня есть папка/MyDocuments/ и есть три файла /MyDocuments/Doc1.rtf /MyDocuments/Doc1.pdf и /MyDocuments/Doc1.jpg и у меня есть изображение myicon.png, теперь у меня есть наложить это изображение myicon.png над файловыми иконками всех трех файлов присутствующим в/MyDocuments/Как наложить (наложить) изображение на значок файла с помощью Cocoa?

Я понимаю, что я могу использовать методы в NSWorkspace sharedWorkspace получить и установить иконки файлов для этих файлов, но Я понятия не имею, как использовать изображение myicon.png и наложить его поверх существующих значков этих файлов.

Если кто-то видел приложение Dropbox (dropbox.com), то это похоже на то, как вы видите, изменились иконки в папку Dropbox

Я предполагаю, что это будет сделано с помощью NSImage, но я не знаю, как сделать это.

Примечание: изображение myicon.png будет занимать только левую верхнюю часть исходного значка этих файлов, то есть изображение не должно полностью перекрываться с существующими значками, но только 1/4 часть в верхнем левом углу должна быть занята ,

ответ

5

Lock focus на значок файла, затем draw значок значка, затем unlock focus. Возможно, вы захотите сделать это с копией значка файла и повесить на нераспакованный оригинал.

Если значок является одним из стандартных значков, поставляемых с Mac OS X, не копируйте значок в свое приложение, он будет устаревшим, если Apple когда-либо изменит его. Стандартные значки названы в IconsCore.h; вы можете обернуть любой из этих типов в строку с помощью функции NSFileTypeForHFSTypeCode, а затем передать эту строку в файл iconForFileType: в NSWorkspace, чтобы получить стандартный значок в качестве изображения, с которого вы можете сделать это.

+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]; 
Смежные вопросы