С друзьями мы пытаемся написать приложение для работы с файлами BMP, и мы сделаем все как можно проще, потому что мы только начинаем изучать C и C++. Копирование идет хорошо с новыми реальными размерами линий, но теперь я хочу добавить эффект серого и получить еще одну проблему: правая часть изображения перемещена влево - проверьте фотографии. Что вызывает эту проблему?Работа с BMP - загрузка и сохранение
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <unistd.h>
using namespace std;
void ReadBMP()
{
FILE* f = fopen("test2.bmp", "rb");
FILE* w = fopen("zapis.bmp", "wb");
if(f == NULL)
throw "Argument Exception";
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, f);
fwrite(info, sizeof(unsigned char), 54, w);
int width = *(int*)&info[18];
int height = *(int*)&info[22];
cout << endl;
cout << "Width: " << width << endl;
cout << "Height: " << height << endl;
int realwidth = 3*width+(4 - ((3*width)%4))%4;
int volume = height * realwidth;
unsigned char* data = new unsigned char[volume];
fwrite(info, sizeof(unsigned char), 54, w);
fread(data, sizeof(unsigned char), volume, f);
unsigned char color = 0;
for(int i = 0; i < volume; i+=3)
{
color = 0;
color+=data[i]*0.114;
color+=data[i+1]*0.587;
color+=data[i+2]*0.299;
data[i] = color;
data[i+1] = color;
data[i+2] = color;
}
fwrite(data, sizeof(unsigned char), volume, w);
fclose(f);
fclose(w);
delete(data);
}
int main()
{
ReadBMP();
return 0;
}
Для записи двоичных данных используйте 'write()', оператор '<<' форматирует текст, даже если файл был открыт в двоичном режиме. –
изменено на fwrite, все еще некоторые проблемы – Ratka
Я на самом деле имел в виду 'fromstream :: write()', но хорошо ... –