1

自从我更新到 10.7.4 后,我的 NSImage 代码就开始出现问题。当我读出图像的表示时,选择位图图像表示并尝试将其写出到 PNG 文件中,我收到错误消息。

因此,我尝试通过“常规”方式进行操作,但出现以下错误:

在此处输入图像描述

我的第一个猜测是删除 libPNG 的损坏版本并将其替换为工作版本。关于我应该如何解决这个问题的任何建议?我可以尝试编译旧版本的 libPNG 并读出位图图像并自己写出来。喜欢 OSX 的质量如何下降到 Lion 中的 windows vista 水平。

是的,OSX 使用 libPNG:http ://d.pr/i/nOEX

为了更清楚一点,这是我的测试构建代码:

NSImage *image = [[NSImage alloc] initWithContentsOfFile:@"/Users/jabwd/Desktop/Icons/4099.ico"];

    NSLog(@"%@",[image representations]);
    NSImageRep *biggest = nil;
    for(NSImageRep *rep in [image representations])
    {
        if( ! biggest )
        {
            biggest = rep;
        }
        else if( [rep size].width >= [biggest size].width && [rep size].height >= [biggest size].height )
        {
            biggest = rep;
        }
    }

    if( biggest && [biggest isKindOfClass:[NSBitmapImageRep class]] )
    {
        NSBitmapImageRep *bitmap = (NSBitmapImageRep *)biggest;
        NSData *data = [bitmap representationUsingType:NSPNGFileType properties:nil];
        [data writeToFile:@"/Users/jabwd/Desktop/test.png" atomically:false];
    }

如您所见,我假设图像中有多种表示形式。在这种情况下我可以这样做,因为我正在加载某种类型的图标,它是一个私人项目,不会落入某些用户的手中 => 我有另一个更大的应用程序需要执行某个任务自动化。

4

1 回答 1

0

看起来 ImageIO.framework 在 10.7.4 中有一些错误,它与 10.7.3 上的 libPNG 版本相同。在将图像转换为 png 之前使用 automator 脚本将图像转换为 jpeg 似乎可以正常工作。

于 2012-05-27T11:17:00.547 回答