2011-01-19 7 views
0

現在、FreeImageを内部的に使用して画像ファイルを読み込んで解析するC++の単純な画像クラスを作成中です。とにかく、ピクセルアレイを一般的でシンプルで安全な方法で実装する方法については、私は本当に確実ではありません。例えば、クラスは異なるチャンネル数を扱うことになっています。現時点では、ファイルタイプとfreeImageが提供するピクセル情報に基づいて、使用するピクセル形式を決定したいので、実際にイメージをロードするときに、実行時に正確な決定を下す必要があります。私はこれに対処する唯一の方法は、画像クラスの定義でいくつかの抽象的な "ピクセル"ベースクラスへのポインタを持って、次にこのようなヒープ上に正しいフォーマットを割り当てることです(基本的に工場のパターン):画像クラスの一般的なピクセル配列(複数のチャンネルをサポート)

私はヒープからの割り当てを避けたいので、これは理想的ではないと思っていますが、実行時に実行する必要があるため、他のものを考えることができないので、皆さんの誰か良いアイデアがあるかもしれません!

おかげ

+0

Stdから派生しないでください::ベクトル、そのクラスではありませんベースクラスのために設計されています。代わりにメンバーにしてください。 – ch0kee

答えて

0

あなたは事前に画像のすべての次元を知っているし、それが(実際、それは比較的小さな画像でなければなりません)大きな画像だ場合、あなたはそれがスタック上の割り当てコンパイル時にすることができます。これらの詳細がわからない場合、または大きなイメージを割り当てる場合は、ヒープ上の割り当てが唯一の解決策です。

さらに詳しい紹介をするには、Boost.GILライブラリのimageany_imageモデルをご覧ください。

あなたのプラットフォームについては言及しなかったが、Windowsの観点から、ここで私からのアドバイスだ
+0

ありがとう、よく私はヒープに割り当てる必要があることを実際に認識していますが、私はヒープ上にstd :: vectorを作成する必要はないが、 。それはそれをより安全にするでしょう。 – moka

0

  • スタックが、デフォルトのユーザ・スタック・サイズは、あなたがコントロールしている場合変更することができます1メガバイトであることを心に留めておきますスレッドの作成は_beginthreadex()を使用します。
  • おそらく最も一般的な選択
  • 使用::VirtualAllocヒープ、あなたは非常に頻繁に/ deallocを非常に大きなバッファー、またはのalloc/deallocをいずれかをALLOC直接場合
+0

ありがとう、私はOSXであり、私はクロスプラットフォームソリューションが必要です。 "ヒープ"についてはっきりしないのは残念ですが、mloskotの投稿へのコメントをご覧ください。 – moka

関連する問題