C ++如何使用已知数据创建PNG文件?

时间:2014-06-17 14:38:34

标签: c++ png

只是想知道,如果我将PNG文件作为二进制文件读取,并且我知道如何将十六进制数字写入另一个普通txt或任何文件,那么如何使用这些十六进制数字重新创建PNG文件?

这是我用来从PNG文件读取并写入另一个普通txt文件的代码:

unsigned char x;
ifile.open("foo.png",ios::binary);
ifile>>noskipws>>hex;
while(ifile>>x){
  ofile<<setw(2)<<setfill('0')<<(int)x;
  //do some formatting stuff to the ofile, ofile declaration omitted
  //some ifs to see if IEND is read in, which is definitely correct
  //if IEND, break, so the last four hex numbers in ofile are 49 45 4E 44
}
//read another 4 bytes and write to ofile, which are AE 42 60 82, the check sum

我这样做的原因是因为我有一些PNG文件在IEND chunk之后有一些不相关的消息,我想摆脱它们并且只保留与实际图片相关的块并将它们分成不同的文件。 “不相关的消息”我的意思是它们不是图片的实际部分,但我还有其他用途。

1 个答案:

答案 0 :(得分:1)

这很简单,你只需要读取每2个字符并将它们从十六进制转换回二进制文件。

unsigned char x;
char buf[3] = {0};
ifile.open("foo.hex");
while(ifile>>buf[0]>>buf[1]){
    char *end;
    x = (unsigned char) strtol(buf, &end, 16);
    if (*end == 0) // no conversion error
        // output the byte