HQ2x Image Upscaling会产生损坏的PNG

时间:2013-01-23 12:42:40

标签: ios c png

简短问题:

有谁知道为什么HQ2x会产生损坏的PNG,或者知道另一种支持我可以尝试的透明度的实现。

更长的问题:

我正在尝试使用HQ2x (with alpha support)来制作放大的图片。

但问题是以下代码会产生损坏的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);

检查输出的前几个字节,我可以推断出出现了两个错误,因为有两个混合PNG Magic Numbers89 50 4e 47 0d 0a 1a 0a):

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

输入图像未损坏。

这是一个Objective-c程序,但重要的部分是纯粹的c。

1 个答案:

答案 0 :(得分:3)

在聊天中讨论了这个答案的部分内容。 (Transcript)

您写入/Users/iPhone/Desktop/out.png的blob是原始像素数据。您必须将其编码为PNG,因为hq2x_32不会自动执行此操作。

如果你在将PNG传递给hq2x_32之前没有对其进行解码,那么你的输入和随后的输出都是错误的。

看看hqx.c,您可以看到传递给hq2x_32的数据首先被解码,然后手动编码输出。两个转换都使用DevIL处理。