问题描述
首先说这是我第一次使用C ++处理pgm文件格式,所以我有很多问题。
fstream img;
img.open(PATH_NAME,ios::in | ios::binary | ios::out);
string line;
getline(img,line); //header part that says "P2"
//stores column and row values
getline(img,line);
istringstream iss(line);
string row_string,col_string;
iss >> row_string;
iss >> col_string;
int original_rows = stoi(row_string);
int original_cols = stoi(col_string);
getline(img,line);//collects maxval
//Now I am collecting actual image/pixel data
getline(img,line);
cout << line;
最后一部分的问题是当我cout << line;
时,这是输出:
\377\377\377\377\377\377\377\377\377\377\377\377\
且持续运行的时间比单行要长得多(我的示例照片中有162列,此代码输出的时间远远超过162 377s)。最大值是255,所以我不确定是什么问题。
- 关于将这些值实际转换为可索引的内容,我该如何处理?到目前为止,我的想法是采用每条字符串行,检测'\'并以此方式收集各个值并将其存储在数组中;将每个字符串转换为int,然后将其存储在向量中。说起来容易做起来难,所以我愿意接受更有效的选择。
解决方法
问题是您将文本I / O与二进制I / O混淆了。据我了解,P5文件中的图像数据保存为二进制字节值。因此,您应该使用class Game(models.Model):
gameday = models.CharField(max_length=120)
hometeam1 = models.ForeignKey(Teams,on_delete=models.CASCADE,related_name="hometeam1",blank=True,null=True)
class Tipp(models.Model):
hometeam1 = models.ForeignKey(Game,default=Game.hometeam1)
week = models.CharField(max_length=120,null=True,blank=True)
将其读取到字节向量(或类似的字节)中,而不要使用用于文本I / O的read
来读取它。
赞
getline
vector<unsigned char> raster(original_rows*original_cols);
img.read(raster.data(),original_rows*original_cols);
是您可索引的内容。