3

当使用NSImage'simageNamed:方法获取当前计算机的图标时,如果我在 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。

关于如何获得高分辨率版本的任何想法?

4

1 回答 1

3

我相信图像来自/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/

Mac mini 图标名为com.apple.macmini.icns. 您可能想检查该文件是否在您的机器上包含 512x512 图标(它在我的机器上,运行 Snow Leopard)'

出于调试目的,您还应该发送 to 的输出-representationsNSLog验证图标是否具有 512x512 版本。

编辑:

10.6 AppKit 发行说明有很多关于NSImage 和 CGI​​mage 之间更新关系的内容。

在 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 文件。

于 2009-10-27T05:03:21.577 回答