У меня самая странная проблема здесь ... Я использую тот же код (копипаст) из Linux в Windows, чтобы ЧИТАТЬ и WRITE и BMP образ. И по какой-то причине в Linux все работает отлично отлично, но когда я прихожу к Windows 10 от некоторых я не могу открыть эти изображения, и у меня появляется сообщение об ошибке, как говорится примерно так:C++: Написать BMP ошибка формата изображения на 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;
}
С моей точки зрения, этот код должен быть кросс-платформенным ... Но это не ... почему?
Спасибо за помощь
Вы можете использовать инструмент сравнения в таких окнах, как windiff, который поставляется вместе с Visual Studio для сравнения двух файлов. Или используйте отладчик, чтобы убедиться, что эти же данные заголовка изображения записаны. –
Что сравнивать? Это точно такой же код ... – Mircea
Я проверил этот код несколько раз, и он точно такой же ... – Mircea