Как наложить (наложить) изображение поверх значка файла с помощью какао? - PullRequest
3 голосов
/ 17 февраля 2010

Мне нужно создать прототип приложения, где я накладываю небольшое изображение поверх значков файлов данной папки. Допустим, у меня есть папка / 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 часть в верхнем левом углу.

Ответы [ 2 ]

5 голосов
/ 17 февраля 2010

Блокировка фокуса на значке файла, затем рисование значок значка, затем разблокировка фокуса . Возможно, вы захотите сделать это с копией значка файла и повесить на немаркированный оригинал.

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

4 голосов
/ 31 марта 2010

В качестве дополнения к ответу Питера Хоси, приведем немного измененный пример кода из:

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];
...