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上运行它时,我得到一个32x32的图标,已经升级到512x512。
关于如何获得高分辨率版本的任何想法?
解决方案
我相信图片来自 /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文件。
不隶属于 StackOverflow