ppm形式(4行目までテキスト、5行目からバイナリ)の画像ファイル読み込みがうまくいきません
Posted: 2014年1月12日(日) 17:38
ppm(P6)形式の画像(4行目までがテキスト、5行目からがバイナリ)の読み込みがうまくいきません。
4行目までの読み込みは、用意した string変数に格納され、cout で出力することで正しいと確認しています。
5行目(以下のコードでは「★うまくいかない部分★」と記載)以降で、ファイルを途中までしか読み取れず困っています。
途中までというのは、以下のように判断しています。
・画像格納配列image をファイルに出力すると、途中までになってします。
・画像格納配列image への読み込んだ unsined char値 を確認すると、途中から 全て0 になっている。
関係があるかわからないのですが、バイナリエディタで見たところ、1A 62 46 1F … から読み込まれいません。
また先頭 1A の ADDRESS は[横:0C、縦:390]です。
エラー処理や例外処理は省いて掲載しています。
4行目までの読み込みは、用意した string変数に格納され、cout で出力することで正しいと確認しています。
5行目(以下のコードでは「★うまくいかない部分★」と記載)以降で、ファイルを途中までしか読み取れず困っています。
途中までというのは、以下のように判断しています。
・画像格納配列image をファイルに出力すると、途中までになってします。
・画像格納配列image への読み込んだ unsined char値 を確認すると、途中から 全て0 になっている。
関係があるかわからないのですが、バイナリエディタで見たところ、1A 62 46 1F … から読み込まれいません。
また先頭 1A の ADDRESS は[横:0C、縦:390]です。
std::ifstream file;
// 画像格納配列
unsigned char image[4000][4000][3];
// 読み込んだ画像の解像度
int width = 0;
int height = 0;
// 読み込んだ画像の諧調数
int max_gray = 0;
// 画像のpath
string name = "読み込む画像のpath"
file.open(name);
//1行目の取得(画像の形式)
std::string line;
getline(file, line);
// 3行目の取得(画像の解像度)
while ( width == 0 || height == 0 ){
std::string line;
std::getline(file, line);
// 2行目のコメント行を飛ばす
if ( line.at(0) != '#' ) {
sscanf_s( line.c_str(), "%d %d", &width, &height );
}
}
// 4行目の取得(画像の諧調数)
while ( max_gray == 0 ){
std::string line;
std::getline(file, line);
if ( buffer[0] != '#' ){
sscanf_s( line.c_str(), "%d", &max_gray );
}
}
// 5行目の以降の取得…★うまくいかない部分★
for(y=0;y<height;++y){
for(x=0;x<width;++x){
for(col=0;col<3;++col){
file.read(reinterpret_cast<char*>(&image[x][y][col]), 1);
}
}
}