4

特定のフォルダのファイルアイコンに小さな画像を重ねるプロトタイプアプリケーションを作成する必要があります。たとえば、フォルダ/ MyDocuments /があり、3つのファイル/MyDocuments/Doc1.rtf/MyDocuments/Doc1.pdfと/MyDocuments/Doc1.jpgがあり、画像myicon.pngがあるとします。次に、この画像myiconを重ね合わせる必要があります。 /MyDocuments/にある3つのファイルすべてのファイルアイコンの上に.png

NSWorkspace sharedWorkspaceのメソッドを使用して、これらのファイルのファイルアイコンを取得および設定できることは理解していますが、画像myicon.pngを使用して、これらのファイルの既存のアイコンにスーパーインポーズする方法がわかりません。

Dropboxアプリケーション(dropbox.com)を見たことがある人は、dropboxフォルダーで変更されたアイコンを見る方法と似ています。

NSImageを使用して実行されると思いますが、実行方法がわかりません。

注:画像myicon.pngは、これらのファイルの元のアイコンの左上部分のみを占めます。つまり、画像は既存のアイコンと完全に重ならないようにする必要がありますが、左上の1/4部分のみを占める必要があります。

4

2 に答える 2

5

ファイル アイコンでフォーカスをロックし、バッジ アイコンを描画してから、フォーカスのロックを解除します。ファイル アイコンのコピーに対してこれを実行し、バッジを付けていないオリジナルを保持することをお勧めします。

バッジが Mac OS X に付属の標準バッジの 1 つである場合は、そのバッジをアプリにコピーしないでください。Apple が変更した場合、バッジは時代遅れに見えます。標準のバッジは、IconsCore.h で名前が付けられています。関数を使用してこれらのタイプのいずれかを文字列でラップし、NSFileTypeForHFSTypeCodeその文字列を NSWorkspace に渡しiconForFileType:て標準のバッジを画像として取得し、その時点から上記を実行できます。

于 2010-02-17T14:34:18.783 に答える
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 に答える