stuff-from-scratch/src/image/Image.h
2023-01-16 08:54:45 +00:00

60 lines
1.3 KiB
C++

#pragma once
#include "PlatformImage.h"
#include <memory>
#include <vector>
class Color;
class AbstractGrid;
template<typename T>
class Grid;
class Image
{
public:
enum class DataType
{
UCHAR
};
using Index = std::pair<std::size_t, std::size_t>;
using Indices = std::vector<Index>;
Image(unsigned width, unsigned height, DataType dataType = DataType::UCHAR);
~Image();
static std::unique_ptr<Image> Create(unsigned width, unsigned height, DataType dataType = DataType::UCHAR);
unsigned getBytesPerRow() const;
unsigned getWidth() const;
unsigned getHeight() const;
unsigned getBitDepth() const;
unsigned getNumChannels() const;
AbstractGrid* getData() const;
template<typename T>
Grid<T>* getDataT() const;
DataType getType() const;
PlatformImage* getPlatformImage();
void setPixelValues(const Indices& indices, const std::vector<Color>& colors);
void setWidth(unsigned width);
void setHeight(unsigned height);
void setBitDepth(unsigned bitDepth);
void setNumChannels(unsigned numChannels);
private:
void initialize();
unsigned mWidth{1};
unsigned mHeight{1};
unsigned mBitDepth{8};
unsigned mNumChannels{4};
DataType mDataType;
std::unique_ptr<AbstractGrid> mData;
std::unique_ptr<PlatformImage> mPlatformImage;
};