1
从我更新到10.7.4开始,我的NSImage代码出现问题。当我读出图像的表示形式时,请选择位图图像表示并尝试将其写入到出现错误的PNG文件中。10.7.4和libPNG
因此,我试图通过“正规军”的方式做,有以下错误:
我的第一个猜测是消除破碎版本的libpng,并与一个正在运行的替换它。有关我应该如何解决这个问题的任何建议?我可以尝试编译旧版本的libPNG并读出位图图像并自己写出来。 爱它如何OSX的质量退化到狮子的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];
}
正如你可以看到我假设有多个表示图像中。我可以在这种情况下做到这一点,因为我正在加载某种类型的图标,它是一个私人项目,不会落入某些用户的手中=>对于另一个更大的应用程序,我有哪些需要自动化。
咦?希望更像Windows Vista? IIRC,OS X和Windows都没有与LibPNG一起提供。 Windows有WIC和OS X有CoreGraphics.- –
@DietrichEpp这一定是为什么它的日志记录为libPNG错误,我很确定它在内部使用libpng。 –
输入图像是什么格式?你遇到了什么错误?为什么你认为只有一个位图图像表示?此外,请编辑您的问题以包含您使用的代码,以选择随机位图图像代表并写出PNG。 –