私は現在、FreeImage を内部的に使用して画像ファイルを読み込んで解析する C++ の単純な画像クラスに取り組んでいます。とにかく、ピクセル配列をできるだけ一般的でシンプルかつ安全に実装する方法についてはよくわかりません。たとえば、クラスはさまざまなチャネル数を処理することになっています。現時点では、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
....
}
};
ヒープからの割り当てを避けたいので、これはまったく理想的ではないと思いますが、実行時に行う必要があるため、他に何も考えられませんでした。より良いアイデア!
ありがとう