首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读/写ASCII .pgm文件

如何读/写ASCII .pgm文件
EN

Stack Overflow用户
提问于 2013-02-24 17:31:48
回答 1查看 3.7K关注 0票数 1

我对归档很陌生,对此我也不太了解。

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

代码语言:javascript
复制
#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];
    }
}

我的代码有一些错误。如果有人帮我改正它,我会很感激的。

EN

回答 1

Stack Overflow用户

发布于 2013-02-24 18:24:55

问题似乎在于从输入文件读取像素的方式:

代码语言:javascript
复制
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));
}

Problem 1:您需要确保您的程序不将该文件的头作为图像的实际像素。请参阅PGM的头格式。在读取像素之前,您很可能必须跳过前3行。

Problem 2:您正在尝试同时读取整个位图,但是在嵌套循环中这样做显然是为了逐像素读取位图像素。

像素的读取可能是这样的:

代码语言:javascript
复制
for(int i = 0; i < height; ++i)
{
    for(int j = 0; j < width; ++j)
        ifile >> bitmap[i][j];
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15054442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档