| #ifndef _RIVE_BITMAP_DECODER_HPP_ |
| #define _RIVE_BITMAP_DECODER_HPP_ |
| |
| #include "rive/rive_types.hpp" |
| #include "rive/span.hpp" |
| |
| /// Bitmap will always take ownership of the bytes it is constructed with. |
| class Bitmap { |
| public: |
| enum class PixelFormat : uint8_t { R, RGB, RGBA }; |
| |
| Bitmap(uint32_t width, |
| uint32_t height, |
| PixelFormat pixelFormat, |
| std::unique_ptr<const uint8_t[]> bytes); |
| |
| Bitmap(uint32_t width, uint32_t height, PixelFormat pixelFormat, const uint8_t* bytes); |
| |
| private: |
| uint32_t m_Width; |
| uint32_t m_Height; |
| PixelFormat m_PixelFormat; |
| std::unique_ptr<const uint8_t[]> m_Bytes; |
| |
| public: |
| uint32_t width() const { return m_Width; } |
| uint32_t height() const { return m_Height; } |
| PixelFormat pixelFormat() const { return m_PixelFormat; } |
| const uint8_t* bytes() const { return m_Bytes.get(); } |
| size_t byteSize() const; |
| size_t byteSize(PixelFormat format) const; |
| size_t bytesPerPixel(PixelFormat format) const; |
| |
| static std::unique_ptr<Bitmap> decode(rive::Span<const uint8_t> bytes); |
| |
| // Change the pixel format (note this will resize bytes). |
| void pixelFormat(PixelFormat format); |
| }; |
| |
| #endif |