私の答えは非常に遅くなりますが、他の人に役立つことを願っています.
OPがこれまでに特定したC#の制限を考慮して、ピクセル形式に関してプログラマーに制限された自由を与える基準のリストを次に示します。
- C# ジェネリック クラスではなく、さまざまなピクセル形式をサポートする柔軟なビットマップ ハンドル C# クラス
- C# 言語のジェネリック クラスは、画像処理のユーザーに何の利益ももたらさなかったからです。
- いくつかの安全性の保証 - ビットマップ ハンドル オブジェクトの特定の特性は不変でなければなりません
- 特に、ビットマップのピクセル形式とピクセルの寸法は、一度作成すると変更できないようにする必要があります。これらを変更するには、新しいオブジェクトを作成する必要があります。
- 可変インターフェイス (ピクセル値の変更を許可) と不変オブジェクト モデル インターフェイスの両方を提供
- 特定のビットマップ引数への書き込みを試みてはならないことを API 関数に示すため。
- ビットマップ ハンドル クラスを受け取って返す一連の画像処理アルゴリズム クラス。
- 各アルゴリズムは、経済的に実現可能な範囲で、さまざまな種類のピクセル形式を処理するために最善を尽くします。
基準を念頭に置いて、構築するライブラリの基盤としてSystem.Windows.Media.Imagingを使用することをお勧めします。
名前空間は、Microsoft Windows Imaging Component (WIC)ライブラリSystem.Windows.Media.Imaging
に相当する C#です。そのため、基礎となる処理はネイティブ C++ で実装されており、実用に必要な速度を実現しています。
WIC に実装された幅広いピクセル形式のサポートのおかげで、対応する C# も同じ範囲のピクセル形式をサポートしています。
WIC (および System.Windows.Media.Imaging) は高度な画像処理機能を提供しません (キャニー エッジ検出、ハフ変換、オブジェクト検出などの類のものは何も提供しません)。
ただし、インメモリ ビットマップ オブジェクト交換インターフェイス (さまざまなイメージ ライブラリを C# インターフェイスまたはバインディングと統合するため) であるという点では、 と の両方System.Windows.Media.Imaging.WriteableBitmap
がSystem.Drawing.Bitmap
適しています。
アルゴリズムの実装に関しては、アルゴリズムを単一チャネルの画像とマルチチャネルの画像に等しく適用することが難しい場合があります。これには、多変量数学の研究に何十年とは言わないまでも何年もかかる。
したがって、画像処理アルゴリズム クラスが、ピクセル形式の狭いサブセットのサポートに重点を置くのが一般的です。
- 1bpp Black White (エッジ マップや接続されたコンポーネント ブロブ メンバーシップなどの論理/決定ビットマップ用)
- 8bpp グレー
- 24bpp BGR
- 32bpp BGRA
- 32bpp グレーフロート
- 96bpp BGR フロート
- 128bpp BGRA フロート
アルゴリズム クラスは、上記のタイプのいずれでもない入力ビットマップ ハンドルを検出した場合、入力形式を上記の形式のいずれかに無損失で "昇格" するために最善を尽くします。
この自動アップコンバートを念頭に置くと、このアルゴリズム クラスのユーザーは、出力ビットマップのピクセル形式を厳密に制御できなくなりますが、出力の視覚的外観が期待どおりになるという保証が得られます。