1

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];
    }

ご覧のとおり、画像には複数の表現があると思います。私がロードしている特定のタイプのアイコンがあり、それはプライベートプロジェクトであり、一部のユーザーの手に渡らないため、この場合にこれを行うことができます=>私が必要とする別のより大きなアプリケーションのための特定のタスクがあります自動化されます。

4

1 に答える 1

0

ImageIO.framework には 10.7.4 にいくつかのバグがあるようです。これは、10.7.3 にあるのと同じ libPNG バージョンです。画像をpngに変換する前に自動化スクリプトを使用して画像をjpegに変換するとうまくいくようです。

于 2012-05-27T11:17:00.547 に答える