【问题标题】:Reading ppm file C++读取 ppm 文件 C++
【发布时间】:2014-11-16 21:42:27
【问题描述】:

我正在尝试读取一个 ppm 文件并将其内容存储在一个数组中。我开始尝试显示它,但我似乎无法输出任何东西。

char magic;
ifstream myfile;
myfile.open(file,ios::in | ios::binary);
  if (!myfile.is_open()) 
   {
      cout<<"Failed to open";
   }
myfile.get(magic);
if(myfile) cout <<magic <<"not working";
myfile.close();

文件已打开,但我无法读取。我也尝试过使用

【问题讨论】:

  • 当你说你“看不懂”时,你是什么意思?当你 cout 时你什么都看不到
  • 什么类型的 PPM?你期待的神奇数字是多少,P1 -> P6?
  • 这个答案可能会帮助您了解如何读取标题,但在不知道您正在处理的文件类型的情况下,我无法就如何读取实际图像数据提供建议。 stackoverflow.com/a/20092028/920069

标签: c++ fstream ifstream ppm


【解决方案1】:

很可能正在读取您的文件,但您的变量并未存储其中的所有值。我建议添加这个而不是 myfile.get(magic):

char magic;
ifstream myfile;

if (!myfile.open(file, ios::in | ios::binary)
{
    cout << "Failed to open" << endl;
}

vector<char> magicNumbers;
while (myfile >> magic)
{
    magicNumbers.push_back(magic);
}
myfile.close();

如您所见,您应该将所有值存储在某种数组中,这里我使用了一个向量以获得灵活性。剩下的就看你自己了。

【讨论】:

  • 效果很好,虽然我认为我的 ppm 照片也有问题,所以我下载了一张新照片。谢谢@Vormeph!
  • 抱歉,再问一个问题@Vormeph,你能解释一下“while (myfile >> magic)”在做什么吗?
  • 它所做的只是将文件中的每个字符(包括空格)读取到变量“char magic”中。你不必这样做,但我这样做的方式更短。如果你想要另一种方式,请参阅 getline(...)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2016-02-09
  • 2011-07-10
相关资源
最近更新 更多