问题描述
首先说这是我第一次使用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;
@H_502_15@最后一部分的问题是当我
cout << line;
时,这是输出:\377\377\377\377\377\377\377\377\377\377\377\377\
@H_502_15@且持续运行的时间比单行要长得多(我的示例照片中有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);
是您可索引的内容。