2012-05-19 35 views
1

从我更新到10.7.4开始,我的NSImage代码出现问题。当我读出图像的表示形式时,请选择位图图像表示并尝试将其写入到出现错误的PNG文件中。10.7.4和libPNG

因此,我试图通过“正规军”的方式做,有以下错误:

enter image description here

我的第一个猜测是消除破碎版本的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]; 
    } 

正如你可以看到我假设有多个表示图像中。我可以在这种情况下做到这一点,因为我正在加载某种类型的图标,它是一个私人项目,不会落入某些用户的手中=>对于另一个更大的应用程序,我有哪些需要自动化。

+0

咦?希望更像Windows Vista? IIRC,OS X和Windows都没有与LibPNG一起提供。 Windows有WIC和OS X有CoreGraphics.- –

+0

@DietrichEpp这一定是为什么它的日志记录为libPNG错误,我很确定它在内部使用libpng。 –

+0

输入图像是什么格式?你遇到了什么错误?为什么你认为只有一个位图图像表示?此外,请编辑您的问题以包含您使用的代码,以选择随机位图图像代表并写出PNG。 –

回答

0

看起来像ImageIO.framework在10.7.4中有一些bug,它在10.7.3上找到了相同的libPNG版本。使用automator脚本将图像转换为jpegs之后,将它们转换为png似乎正在工作。