1

短い質問:

HQ2x が破損した PNG を生成する理由を知っている人、または私が試すことができる透過性をサポートする別の実装を知っている人はいますか?

より長い質問:

HQ2x (アルファ サポート付き)を使用してアップスケールされた画像を生成しようとしています。

ただし、問題は、次のコードが破損した PNG を生成することです。

UIImage *image = [UIImage imageNamed:@"testIcon.png"];
NSMutableData *data = [NSMutableData dataWithData:UIImagePNGRepresentation(image)];

uint32_t *imageData = (uint32_t *) malloc([data length]);
uint32_t *newImageData = (uint32_t *) malloc(image.size.width * 4 * image.size.height * 4 * sizeof(uint32_t));

[data getBytes:imageData];

hqxInit();
hq2x_32(imageData, newImageData, image.size.width, image.size.height);


FILE *file;
file = fopen("/Users/iPhone/Desktop/out.png","w");
fwrite(newImageData, image.size.width * 4 * image.size.height * 4 * sizeof(uint32_t), 1, file);
fclose(file);

出力の最初の数バイトを調べると、2 つのPNG マジック ナンバー( 89 50 4e 47 0d 0a 1a 0a)が混在しているため、何か問題が発生していると推測できます。

89 50 4E 47 89 50 4E 47 0D 0A 1A 0A 0D 0A 1A 0A

入力画像は壊れていません。

これは客観的な c プログラムですが、重要な部分は純粋な c に含まれています。

4

1 に答える 1

3

この回答の一部はチャットで議論されました。(写し)

書き込むブロブ/Users/iPhone/Desktop/out.pngは生のピクセル データです。hq2x_32自動的に行わないため、PNG としてエンコードする必要があります。

PNGを渡す前にデコードしていない場合hq2x_32、入力とその後の出力が間違っています。

を見てhqx.cください。渡されたデータhq2x_32が最初にデコードされ、次に出力が手動でエンコードされていることがわかります。どちらの変換もDevILを使用して処理されます。

于 2013-01-23T12:59:28.147 に答える