我能够很好地读取图像的头文件,但是我无法将红色 channel 的第一个数据值(例如 206)放入二维数组 ppmImage.red[0 ][0]
。紧随其后的是空白,然后是绿色 channel 的第一个值,依此类推。
下面是我目前正在做的,而不是 ppmImage.red[0][0]
中的 206,我有 ppmImage.red[0][0]
= 2,ppmImage.green[0][0]
=0,ppmImage.blue[0][0]
=6。作为引用,这些值仅为 8 位值,因此红色、绿色和蓝色属于像素类型并且是 unsigned char
。
void readTextData(fstream &fin, struct ppmImage &image)
{
int iii, jjj;
for(iii = 0; iii < image.rows ; iii++)
{
for(jjj = 0; jjj < image.cols; jjj++)
{
fin >> image.red[iii][jjj];
fin >> image.green[iii][jjj];
fin >>image.blue[iii][jjj];
}
}
fin.close();
}
我以为 fin >>
会一直读到它遇到空白,但我错了。我也尝试使用 fin.read((char *) & image.redgray[iii][jjj],sizeof(pixel));
但结果相同。
数据可以是这样的形式:
1 2
3 4 5
6 7 8 9
而且我不确定我将如何处理“\n”。
我已经搜索过信息,结果比现在更加困惑。我会很感激在正确的方向轻推或有人指出我的愚蠢。提前致谢。
最佳答案
这听起来像是一个简单的修复,您必须读取整数而不是无符号字符。由于您的图像使用 unsigned char,您需要做的只是添加一些用于读取的临时整数。
int red, green, blue;
fin >> red >> green >> blue;
image.red[iii][jjj] = red;
image.green[iii][jjj] = green;
image.blue[iii][jjj] = blue;
我假设你的图像文件是一个文本文件,从你的描述来看似乎是这种情况。
关于c++ - 在 C++ 中将图像数据(R、G 和 B 像素)读入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238883/