NSImage imageNamed:Mac Miniが高解像度ではなく小さなアイコンを返す
-
06-07-2019 - |
質問
NSImage
の imageNamed:
メソッドを使用して現在のコンピューターのアイコンを取得する場合、Mac Miniで実行していると、低解像度になります画像。 MacBookから同じコードを実行すると、期待どおりの高解像度アイコンが表示されます。
私のコードは次のとおりです。
NSImage *image;
image = [NSImage imageNamed:@"NSComputer"];
[image setSize: NSMakeSize(512,512)];
NSData * tiffData = [image TIFFRepresentation];
NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:tiffData];
data = [bitmap representationUsingType:NSPNGFileType properties:nil];
mime = @"image/png";
MacBookでそれを実行すると、すべてがうまく機能し、コンピューターの512x512アイコンが表示されます。 Mac Miniで実行すると、512x512にアップスケールされた32x32アイコンが表示されます。
高解像度バージョンを入手する方法についてのアイデアはありますか?
解決
画像は /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/から来ていると思います
Mac miniアイコンの名前は com.apple.macmini.icns
です。マシン上でそのファイルに512x512アイコンが含まれているかどうかを確認することをお勧めします(私の場合はSnow Leopardを実行しています) '
デバッグの目的で、 -representations
の出力を NSLog
に送信して、アイコンに512x512バージョンがあるかどうかを確認する必要があります。
編集:
10.6 AppKitリリースノートにはかなりのNSImageとCGImageの更新された関係について。
Snow Leopardでは、CGImageRefに変換することでフル解像度の画像を取得できます:
NSImage* image = [NSImage imageNamed:NSImageNameComputer];
NSRect imageRect = NSMakeRect(0, 0, 512, 512);
CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:nil hints:nil];
そこから、CGImageRefから新しいNSImageを作成するか、CGImageDestination * APIを使用してpngファイルを書き込むことができます。