Cześć, od paru dni męczę się z pewnym problemem. Mianowicie próbuje rozgryźć to jak odczytać-zmodyfikować-zapisać obraz w formacie bitmapy... Szukam sporo w internecie i nie mogę znaleźć a sam aż tak tego nie rozumiem :(. Mam taki program napisany. Odczyt działa tylko nie wiem jak to zapisać do pliku. Wiem, że każdy element powstałej tablicy to kolejny bit obrazu więc wystarczy je zmodyfikować.
#include <iostream>
#include <Windows.h>
#include <fstream>
using namespace std;
uint8_t* datBuff[2] = { nullptr, nullptr };
uint8_t* pixels = nullptr;
BITMAPFILEHEADER* bmpHeader = nullptr;
BITMAPINFOHEADER* bmpInfo = nullptr;
int LoadBMP(const char* location);
int SaveNewBmp(const char* location);
int main()
{
}
int LoadBMP(const char* location) {
std::ifstream file(location, std::ios::binary);
if (!file)
{
std::cout << "Failure to open bitmap file.\n";
return 1;
}
datBuff[0] = new uint8_t[sizeof(BITMAPFILEHEADER)];
datBuff[1] = new uint8_t[sizeof(BITMAPINFOHEADER)];
file.read((char*)datBuff[0], sizeof(BITMAPFILEHEADER));
file.read((char*)datBuff[1], sizeof(BITMAPINFOHEADER));
bmpHeader = (BITMAPFILEHEADER*)datBuff[0];
bmpInfo = (BITMAPINFOHEADER*)datBuff[1];
if (bmpHeader->bfType != 0x4D42)
{
std::cout << "File \"" << location << "\" isn't a bitmap file\n";
return 2;
}
pixels = new uint8_t[bmpInfo->biSizeImage];
file.seekg(bmpHeader->bfOffBits);
file.read((char*)pixels, bmpInfo->biSizeImage);
return 0;
}
int SaveNewBmp(const char* location) {
std::ofstream file(location, std::ios::binary);
if (!file)
{
std::cout << "Failure to open bitmap file.\n";
return 1;
}
file.write((char*)datBuff[0], sizeof(BITMAPFILEHEADER));
file.write((char*)datBuff[1], sizeof(BITMAPINFOHEADER));
file.write((char*)pixels, bmpInfo->biSizeImage);
return 0;
}
Jakieś pomysły? Z góry dziękuję :D