当使用 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文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top