我目前正在使用FreeImage內部加載和分析圖像文件的C++中的簡單圖像類。無論如何,我不確定如何將像素數組儘可能通用,簡單和安全地實現。例如,班級應該處理不同的頻道數量。因爲現在我只想根據freeImage給我的文件類型和像素信息來決定使用哪種像素格式,所以在實際加載圖像時,必須在運行時做出確切的決定。我認爲解決這個問題的唯一方法是在圖像類定義中指向一些抽象的「像素」基類,然後像這樣在堆上分配正確的格式(基本上是工廠模式):用於圖像類的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
....
}
};
我不認爲這是理想的,因爲我想避免從堆中分配,但由於它必須在運行時完成,所以我不能想到其他任何東西,所以我想知道如果你們中的任何一個人可能有更好的主意!
感謝
不要的std ::矢量派生,這個類是不爲基礎類而設計。讓它成爲一個成員。 – ch0kee 2011-01-19 23:08:54