BmpPP/Src/BMP.h

82 lines
2.6 KiB
C
Raw Normal View History

2022-03-05 16:15:00 +01:00
#ifndef BMPPP_BMP_H
#define BMPPP_BMP_H
#include <Eule/Vector2.h>
#include <vector>
#include <cstdint>
#include "Colormodes.h"
namespace Leonetienne::BmpPP {
2022-03-05 20:40:49 +01:00
class BmpWriter;
2022-03-05 22:00:57 +01:00
class BmpReader;
2022-03-05 20:40:49 +01:00
2022-03-05 16:15:00 +01:00
class BMP {
public:
2022-03-05 22:00:57 +01:00
// Will create an uninitialized image
BMP();
2022-03-05 22:00:57 +01:00
//! Will create an image with the entire pixel buffer set to 0
2022-03-05 16:15:00 +01:00
explicit BMP(const Eule::Vector2i& size, const Colormode& colormode = Colormode::RGBA);
2022-03-05 22:00:57 +01:00
//! Will create a image and read it from a bmp file
explicit BMP(const std::string& filename);
//! Will return a pointer to the first byte of a pixel at a given position
std::uint8_t* GetPixel(const Eule::Vector2i& position);
//! Will return a pointer to the first byte of a pixel at a given position
const std::uint8_t* GetPixel(const Eule::Vector2i& position) const;
//! Will set the color of a pixel at a given position
void SetPixel(const Eule::Vector2i& position, const std::uint8_t r, const std::uint8_t g, const std::uint8_t b, const std::uint8_t a = 0xFF);
2022-03-05 19:51:57 +01:00
//! Will basically reconstruct this image, to fit a new resolution
void ReInitialize(const Eule::Vector2i& size);
//! Will basically reconstruct this image, to fit a new resolution and new format
void ReInitialize(const Eule::Vector2i& size, const Colormode& colormode);
2022-03-05 19:37:02 +01:00
//! Will return a pointer to the raw pixel data
std::uint8_t* data();
//! Will return a pointer to the raw pixel data
const std::uint8_t* data() const;
//! Will return the dimensions of the image
const Eule::Vector2i& GetDimensions() const;
//! Will return the color mode of the image
const Colormode& GetColormode() const;
2022-03-05 16:15:00 +01:00
2022-03-05 19:37:02 +01:00
//! Will return the amount of color channels used
std::size_t GetNumColorChannels() const;
//! Will return the size of the raw pixel buffer, in bytes
std::size_t GetPixelbufferSize() const;
//! Will return whether this image is initialized or not
bool IsInitialized() const;
//! Will write the bmp image to a file.
//! Returns false, if unable to open the file
bool Write(const std::string& filename) const;
2022-03-05 20:40:49 +01:00
//! Will read a bmp image from a file.
//! Returns false, if unable to open, or parse, file
bool Read(const std::string& filename);
2022-03-05 19:37:02 +01:00
private:
2022-03-05 16:15:00 +01:00
Eule::Vector2i size;
Colormode colormode;
2022-03-05 16:15:00 +01:00
std::vector<std::uint8_t> pixelBuffer;
bool isInitialized = false;
2022-03-05 20:40:49 +01:00
friend class BmpWriter;
2022-03-05 22:00:57 +01:00
friend class BmpReader;
2022-03-05 16:15:00 +01:00
};
}
#endif //BMPPP_BMP_H