C++ 如何将ppm文件的RGB值存储到C++;

C++ 如何将ppm文件的RGB值存储到C++;,c++,arrays,rgb,fstream,C++,Arrays,Rgb,Fstream,任务是操作PPM文件并将RGB值存储到数组中。我能够抓取文件的头并获取P6、宽度、高度和最大RGB值,但我无法获取RGB值本身。我知道像素数据被空格隔开,但流输入仍然找不到它。我们还没有学习过课程或指针,所以可以不使用任何一种吗 #include <fstream> #include <iostream> #include <string> const int WID = 648; const int HEIGHT = 486; int main() {

任务是操作PPM文件并将RGB值存储到数组中。我能够抓取文件的头并获取P6、宽度、高度和最大RGB值,但我无法获取RGB值本身。我知道像素数据被空格隔开,但流输入仍然找不到它。我们还没有学习过课程或指针,所以可以不使用任何一种吗

#include <fstream>
#include <iostream>
#include <string>

const int WID = 648;
const int HEIGHT = 486;

int main() {
  int arr[HEIGHT * WID * 3];
  unsigned char r, g, b;

  std::string header;
  int wid, hei, max;
  std::ifstream fin;

  fin.open("file.ppm");
  if (fin.fail()) {
    std::cout << "file did not open: << std::endl;
  }

  fin >> header;
  fin >> wid >> hei >> max;

  for (int i; i < HEI * WID * 3; ++i) {
    r = arr[i];
    g = arr[i + 1];
    b = arr[i + 2];
  }

  std::cout << header << wid << hei << max << r << g << b;

  fin.close();

  return 0;
}
#包括
#包括
#包括
常数int WID=648;
const int HEIGHT=486;
int main(){
内方位[高度*宽度*3];
无符号字符r,g,b;
std::字符串头;
int wid,hei,max;
std::ifstream-fin;
fin.open(“file.ppm”);
if(fin.fail()){

std::cout奇怪--如果文件无法打开,您的程序将继续运行,就像没有任何错误一样。
int arr[HEIGHT*WID*3];
--假设
sizeof(int)==4
超过3.5 MB的堆栈内存。堆栈大小有限。使用堆内存,或使该数组成为全局数组。
arr
中的值来自何处?请注意,
r
g
b
被声明为
无符号字符
,因此,根据它们的实际值,它们可能不会可打印。请尝试使用
std::cout
(int i;< /c>)叹息。未定义的行为。所显示的程序的每一秒钟或第三行都有问题。需要什么。在尝试解决像解析图形文件之类的问题之前,您将从集中一些C++基础和基本概念中获得更多的好处,并使它们变得更为坚实。