【问题标题】:NSImage imageNamed: for Mac Mini returns small icon instead of high-resNSImage imageNamed:对于 Mac Mini 返回小图标而不是高分辨率
【发布时间】:2009-10-27 04:45:57
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c icons nsimage imagenamed


    【解决方案1】:

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

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

    出于调试目的,您还应该将-representations 的输出发送到NSLog,以验证图标是否有512x512 版本。

    编辑:

    10.6 AppKit Release Notes 有不少关于 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 文件。

    【讨论】:

    • 这种方法的不幸之处在于它需要程序员硬编码图标文件的路径和名称。
    • @Dave DeLong,我相信他的意思是系统从目录中获取了图像“NSComputer”......他在这里提到了它,这样你就可以自己检查实际的代表是什么文件。并不是说您应该将完整路径放在代码中。
    • more确实以全分辨率显示,因此该文件在系统中 - 我似乎无法以全分辨率获得 NSImage 对象 3. 当我创建 [NSImage imageNamed:] 时,它只有 1 个表示形式并且它有一个大小 32
    • 这是雪豹的东西。如果您直接从路径加载图像文件,您将获得所有表示。如果你使用 +imageNamed: 加载它,你只会得到 32x32 的表示;但是,如果您随后将该图像实例传递给 NSImageView 它可以显示全分辨率图像。也许 [NSImage imageNamed:] 正在返回一些缓存的图像实例,而其他表示已被删除?
    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2015-07-16
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2011-03-26
    • 2011-06-16
    • 2012-12-11
    相关资源
    最近更新 更多