10.7.4にアップデートしてから、NSImageコードで問題が発生し始めました。画像の表現を読み取るときに、ビットマップ画像表現を選択して、PNGファイルに書き出そうとするとエラーが発生します。
したがって、次のエラーを使用して、「通常の」方法でそれを実行しようとしました。
私の最初の推測は、壊れたバージョンのlibPNGを削除し、動作するバージョンに置き換えることです。この問題にどのように取り組むべきかについての提案はありますか?古いバージョンのlibPNGをコンパイルして、ビットマップイメージを読み取り、自分で書き出すことができます。OSXの品質がLionのWindowsVistaのレベルまで低下した方法が気に入っています。
はい、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];
}
ご覧のとおり、画像には複数の表現があると思います。私がロードしている特定のタイプのアイコンがあり、それはプライベートプロジェクトであり、一部のユーザーの手に渡らないため、この場合にこれを行うことができます=>私が必要とする別のより大きなアプリケーションのための特定のタスクがあります自動化されます。