В настоящее время я работаю над простым классом изображений в C++, который использует FreeImage для загрузки и анализа файлов изображений. В любом случае я не совсем уверен, как реализовать свой массив пикселей как универсальный, простой и безопасный, насколько это возможно. Например, класс должен обрабатывать разные количества каналов. Поскольку на данный момент я просто хочу решить, какой формат пикселей использовать на основе типа файла и информации о пикселях, которую дает freeImage, точные решения должны приниматься во время выполнения при фактической загрузке изображения. Я думаю, что единственный способ справиться с этим состоит в том, чтобы иметь указатель на какой-то абстрактный базовый класс «Pixels» в определении класса изображения, а затем выделять правильный формат на куче, подобный этому (в основном заводской шаблон):C++ общий пиксельный массив (поддерживающий несколько каналов) для класса изображения
//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
....
}
};
Я не думаю, что это идеальный вариант, поскольку я хотел бы избежать выделения из кучи, но так как это должно быть сделано во время выполнения, я не мог думать ни о чем другом, поэтому мне было интересно, если кто-нибудь из вас, ребята, может быть лучше!
Благодаря
Не проистекают из станд :: вектор, этот класс не является предназначенный для базового слоя. Сделайте это вместо этого. – ch0kee