にBMP画像のフォーマットエラーを書いてください...私はREADとWRITEに、WindowsでLinuxからの同じコード(コピー&ペースト)を使用し、よBMP画像。そして何らかの理由でのLinuxがすべて動作します、Windows 10からいくつかの画像を開くことができません。エラーメッセージが表示されます。C++:私はここで最も奇妙な問題を抱えているWINDOWS
"このファイル形式はサポートされていないようです。"
私は何をすべきですか?私は以下のコードを記入します。
EDIT:
任意のアイデアなぜ、私は、パディングの問題を解決してきたし、今では、画像の書き込みだが、彼らは完全に白ですか?私もコードを更新しました。
struct BMP {
int width;
int height;
unsigned char header[54];
unsigned char *pixels;
int size;
int row_padded;
};
void writeBMP(string filename, BMP image) {
string fileName = "Output Files\\" + filename;
FILE *out = fopen(fileName.c_str(), "wb");
fwrite(image.header, sizeof(unsigned char), 54, out);
unsigned char tmp;
for (int i = 0; i < image.height; i++) {
for (int j = 0; j < image.width * 3; j += 3) {
// Convert (B, G, R) to (R, G, B)
tmp = image.pixels[j];
image.pixels[j] = image.pixels[j + 2];
image.pixels[j + 2] = tmp;
}
fwrite(image.pixels, sizeof(unsigned char), image.row_padded, out);
}
fclose(out);
}
BMP readBMP(string filename) {
BMP image;
string fileName = "Input Files\\" + filename;
FILE *f = fopen(fileName.c_str(), "rb");
if (f == NULL)
throw "Argument Exception";
fread(image.header, sizeof(unsigned char), 54, f); // read the 54-byte header
// extract image height and width from header
image.width = *(int *) &image.header[18];
image.height = *(int *) &image.header[22];
image.row_padded = (image.width * 3 + 3) & (~3);
image.pixels = new unsigned char[image.row_padded];
unsigned char tmp;
for (int i = 0; i < image.height; i++) {
fread(image.pixels, sizeof(unsigned char), image.row_padded, f);
for (int j = 0; j < image.width * 3; j += 3) {
// Convert (B, G, R) to (R, G, B)
tmp = image.pixels[j];
image.pixels[j] = image.pixels[j + 2];
image.pixels[j + 2] = tmp;
}
}
fclose(f);
return image;
}
私の見解では、このコードはクロスプラットフォームでなければなりません...しかし、それはなぜですか? 0x42 0x4D
:ヘルプ
Visual Studioに付属のwindiffのようなウィンドウで比較ツールを使用して、2つのファイルを比較することができます。デバッガを使用して同じイメージヘッダーデータが書き込まれていることを確認します。 –
何を比較する?それはまったく同じコードです... – Mircea
私はこのコードを数回チェックしましたが、まったく同じです... – Mircea