2012-05-19 2 views
1

С момента обновления до 10.7.4 У меня возникли проблемы с кодом NSImage. Когда я читаю представления изображения, выберите представление изображения Bitmap и попытайтесь записать его в файл PNG, я получаю сообщение об ошибке.10.7.4 и libPNG

Поэтому я попытался сделать это через «регулярный» способ, со следующими ошибками:

enter image description here

Моей первой догадкой будет извлекать сломанную версию Libpng и заменить его рабочие один. Любые предложения о том, как я должен решить эту проблему? Я мог бы попытаться собрать старую версию libPNG и прочитать растровое изображение и записать его сам. Любите его, как качество OSX ухудшилось до уровня Windows Vista в Lion.

И да, 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, его же версию libPNG, найденную в 10.7.3. Использование сценария автомата для преобразования изображений в jpegs до преобразования их в png, похоже, работает.

Смежные вопросы