Clean up Image class.

This commit is contained in:
jmsgrogan 2023-01-11 14:31:29 +00:00
parent 4bb87de0e6
commit 0d3674faac
30 changed files with 330 additions and 135 deletions

110
src/image/ImageData.h Normal file
View file

@ -0,0 +1,110 @@
#pragma once
#include <vector>
#include <type_traits>
class ImageData
{
public:
enum class Type
{
UCHAR,
UINT8,
UNKNOWN
};
virtual Type getType() const = 0;
virtual void setDataItem(std::size_t index, unsigned char item) = 0;
virtual unsigned char getAsUnsignedChar(std::size_t index) const = 0;
virtual std::size_t getLength() const = 0;
};
template<typename T>
class ImageDataT : public ImageData
{
public:
virtual Type getType() const override
{
if (std::is_same<T, unsigned char>::value)
{
return Type::UCHAR;
}
else if (std::is_same<T, uint8_t>::value)
{
return Type::UINT8;
}
else
{
return Type::UNKNOWN;
}
}
template<typename T>
const T* getDataPtr() const
{
return mData.data();
}
template<typename T>
const std::vector<T>& getData() const
{
return mData;
}
template<typename T>
void setData(const std::vector<T>& data)
{
mData = data;
}
void setDataItem(std::size_t index, unsigned char item) override
{
if (index < mData.size())
{
mData[index] = static_cast<T>(item);
}
}
template<typename T>
void setDataItem(std::size_t index, T item)
{
if (index < mData.size())
{
mData[index] = item;
}
}
template<typename T>
void initialize(std::size_t size, T value)
{
mData.resize(size);
for (std::size_t idx = 0; idx < size; idx++)
{
mData[idx] = value;
}
}
unsigned char getAsUnsignedChar(std::size_t index) const override
{
if (index < mData.size())
{
return static_cast<unsigned char>(mData[index]);
}
else
{
return 0;
}
}
std::size_t getLength() const override
{
return mData.size();
}
private:
std::vector<T> mData;
};