В настоящее время я работаю над простым классом изображений в c ++, который использует FreeImage для загрузки и анализа файлов изображений.В любом случае, я не совсем уверен, как реализовать свой массив пикселей как можно более простым, простым и безопасным.Например, класс должен обрабатывать разные количества каналов.Поскольку сейчас я просто хочу решить, какой формат пикселя использовать, основываясь на типе файла и информации о пикселях, которую мне предоставляет freeImage, точные решения должны приниматься во время выполнения, когда фактически загружается изображение.Я думаю, что единственный способ справиться с этим - это указать указатель на некоторый абстрактный базовый класс «Pixels» в определении класса изображения, а затем выделить правильный формат в куче, как показано ниже (в основном, фабричный шаблон):
//pseudo code
class Image{
template<class T, class TNumChannels>
struct Pixel
{
T v[TNumChannels];
};
class BasePixelArray{...};
class RGBPixelArray :
public std::vector<Pixel<uint8, 3> >,
public BasePixelArray
{
...
};
private:
BasePixelArray * m_pixelPtr;
public:
void loadImage(const std::string & _bla)
{
//parse and decide what pixelformat to use, i.e
m_pixelPtr = static_cast<BasePixelArray*>(new RGBPixelArray);
//fill array
....
}
};
Я не думаю, что это вообще идеально, так как я хотел бы избежать выделения из кучи, но так как это должно быть сделано во время выполнения, я не мог думать ни о чем другом, поэтому мне было интересно, если кто-нибудь изВы, ребята, могли бы иметь лучшую идею!
Спасибо