我目前正在用 C++ 编写一个简单的图像类,它在内部使用 FreeImage 来加载和解析图像文件。无论如何,我不太确定如何将我的像素数组实现为尽可能通用、简单和安全。例如,该类应该处理不同的通道数。因为现在我只想根据 freeImage 给我的文件类型和像素信息来决定使用哪种像素格式,所以必须在运行时实际加载图像时做出确切的决定。我认为解决这个问题的唯一方法是在图像类定义中有一个指向一些抽象“像素”基类的指针,然后像这样在堆上分配正确的格式(基本上是工厂模式):
//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
....
}
};
我认为这根本不理想,因为我想避免从堆中分配,但由于它必须在运行时完成,我真的想不出其他任何东西,所以我想知道你们中是否有人可能有一个更好的主意!
谢谢