c++如何用已知的数据创建PNG文件

C++ how to create a PNG file with known data?

本文关键字:数据 创建 PNG 文件 何用 c++      更新时间:2023-10-16

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

这是我用来从PNG文件中读取并写入另一个纯文本文件的代码:

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块之后有一些不相关的消息,我想摆脱它们,只保留与实际图片相关的块,并将它们分割成不同的文件。所谓"无关信息",我的意思是它们不是图片的实际组成部分,但我对它们有其他用途。

这很容易,你只需要读取每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