2012-05-19 84 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似乎正在工作。