У меня проблема с копированием файла bmp. Как загрузить его в память (с возможностью редактирования пикселей) и сохранить в другом месте? Без использования внешних библиотек.
Я прилагаю то, что мне удалось сделать. Функция загрузки, вероятно, работает правильно. Writer №.
Мне нужна помощь в создании функции записи. И возможная проверка функции чтения
#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;
}
Есть идеи?
Я не могу использовать пользовательские библиотеки. Рассмотрим случай файла 8 бит на пиксель. Нет другого.