gpt4 book ai didi

c++ - 如何读/写 ASCII .pgm 文件

转载 作者:行者123 更新时间:2023-11-30 04:20:45 29 4
gpt4 key购买 nike

刚接触归档,不太了解。

我写了一段代码,试图读取名为 owl.pgm 的 ASCII .pgm 文件,并将其写入 myowl.pgm 文件:

#include <fstream>
const int MAXHEIGHT=221;
unsigned char *bitmap[MAXHEIGHT]={'\0'} ;// pointers to each pixel row
int main()
{
int width=201, height=221;
std::ifstream ifile("owl.pgm",std::ios::in);
std::ofstream ofile("myowl.pgm",std::ios::out);
for(int i=0;i<height;++i)
{
for(int j=0;j<width;++j)
ifile.read(bitmap[i][j],sizeof(bitmap));
}
ofile << "P2\n" << width << " " << height << "\n255\n";
for(int i=0;i<height;++i)
{
for(int j=0;j<width;++j)
ofile<<bitmap[i][j];
}
}

我的代码有一些错误。如果有人帮助我更正它,我将不胜感激。

最佳答案

问题似乎出在您从输入文件中读取像素的方式上:

std::ifstream ifile("owl.pgm",std::ios::in);
for(int i=0;i<height;++i)
{
for(int j=0;j<width;++j)
ifile.read(bitmap[i][j],sizeof(bitmap));
}

问题 1:您需要确保您的程序不会将该文件的标题视为图像的实际像素。查看PGM的头格式.在读取像素之前,您很可能必须跳过前 3 行。

问题 2:您试图一次读取整个位图,但您是在嵌套循环中执行此操作的,这显然意味着逐个像素地读取位图。

像素的读取可能看起来像这样:

for(int i = 0; i < height; ++i)
{
for(int j = 0; j < width; ++j)
ifile >> bitmap[i][j];
}

关于c++ - 如何读/写 ASCII .pgm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054442/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com