【发布时间】:2016-08-07 00:18:55
【问题描述】:
我正在尝试读取图片文件。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream read("C://Users/Ben/Desktop/1.jpg");
while (1){
cout << read.get();
cin.get();
}
return 0;
}
当我这样做时,我得到一系列从 0 到 255 的数字。所以我假设它正确读取字节值,除了我过早地点击 -1 (eof) 的事实。在大约 30 到 40 个值之后,出现 -1。这是一个 3MB 的文件。我不希望 -1 会在以后出现。怎么回事?
【问题讨论】:
-
您可能需要在打开文件时指定二进制模式(C 中的
fopen(file, "rb");我不知道如何处理流)。 -
ifstream::traits_type::eof()不一定会评估为-1,但即使它确实如此,如果文件中有任何0xFF字节,您认为输出会是什么? -
您还没有以二进制模式打开文件。尝试为
ios_base::in | ios_base::binary形式的构造函数提供第二个参数。 -
这绝对不是加载和读取 jpg 格式图像的方法。您看到的(预期)值不一定是像素(如果这是您的想法)。对于您得到的
-1,它可能是unsigned char255,而您将其阅读为signed,即-1。 -
get()的这个变体返回int,保证能够表示255的值。