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