С момента обновления до 10.7.4 У меня возникли проблемы с кодом NSImage. Когда я читаю представления изображения, выберите представление изображения Bitmap и попытайтесь записать его в файл PNG, я получаю сообщение об ошибке.10.7.4 и libPNG
Поэтому я попытался сделать это через «регулярный» способ, со следующими ошибками:
Моей первой догадкой будет извлекать сломанную версию 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];
}
Как вы можете видеть, что я полагаю, есть несколько представлений в изображении , Я могу сделать это в этом случае, потому что есть определенный тип значков, которые я загружаю, его частный проект и не попадет в руки некоторым пользователям => есть определенная задача для другого большего приложения, которое мне нужно для автоматизации.
А? Хотел быть больше похожим на Windows Vista? IIRC, ни OS X, ни Windows, как правило, не поставляются с LibPNG. Windows имеет WIC, а OS X имеет CoreGraphics.- –
@DietrichEpp, поэтому его регистрация как ошибка libPNG, я уверен, что она использует libpng внутри. –
Какой формат является входным изображением? Какую ошибку вы получаете? И почему вы предполагаете, что есть только одно представление растрового изображения? Кроме того, пожалуйста, отредактируйте свой вопрос, чтобы включить код, который вы используете, чтобы выбрать случайный образ растрового изображения и записать PNG. –