【发布时间】:2016-02-17 16:57:52
【问题描述】:
我正在尝试使用以下代码从标准输入读取 PPM 图像:
cin >> format;
cin >> ppm->width >> ppm->height >> ppm->colourMax;
for (int r = 0; r < ppm->height; r++) {
ppm->pixels[r] = new Pixel[ppm->width];
for (int c = 0; c < ppm->width; c++) {
Pixel p = Pixel();
cin.read(reinterpret_cast<char *>(&p.r), sizeof(unsigned char));
cin.read(reinterpret_cast<char *>(&p.g), sizeof(unsigned char));
cin.read(reinterpret_cast<char *>(&p.b), sizeof(unsigned char));
ppm->pixels[r][c] = p;
}
}
但是,当我输出 PPM 图像不变时,我错过了最后一个像素。其他一切似乎都完美无缺。有什么想法吗?
【问题讨论】:
-
尚未检查,但您可能缺少 first 像素?
-
缺少哪些像素坐标?这是否因输入图像的大小而异?您是否尝试过多个源图像文件?
-
当我将原始文件与输出进行比较时,原始文件末尾有 1 个额外字节。
-
另外值得注意的是,您可以声明
Pixel& p = ppm->pixels[r][c]并避免创建无用的中间变量。那样复制就少了。 -
一个字节对于一个像素是不够的,因为您的代码每个像素读取 3 个字节。那个额外的字节是什么?你的系统是什么?