※ ChatGPTを利用し、要約された質問です(原文:C++/CLIで画像処理)
C++/CLIで画像処理
このQ&Aのポイント
VC 2010 C++/CLIで画像処理を行うためのライブラリを探しています。
既存プロジェクトにグラフィック機能を追加するため、異なるサイズの画像を重ねて描画したり、画像の透過処理や変形を行いたいです。
標準の機能やOpenCV、OpenGL、DXLib、GDI+、Direct2Dなどを試しましたが、それぞれのライブラリには制約や課題があります。どのライブラリが最適か教えていただけませんか。
お世話になります
VC 2010 C++/CLIで作成されている、既存プロジェクトに以下のグラフィック機能を追加したいのですが、
色々試しては挫折してます。
実現可能なライブラリを教えていただけないでしょうか。
【補足】
・既存プロジェクトはそれなりに大きなものなので、既存部の書き換えは考えておりません
・既存プロジェクトはPictureBoxで出来る範囲の色々な描画を行っているので、ここはそのまま残す予定
【追加機能】※ 以下は新規に子フォームを作成して、独立した機能として追加予定
1. 異なるサイズの画像(写真)を重ねて描画する(これは、単純なので標準の機能を始め全てで出来ます。)
2. 上面の画像を半透明にして、背景の写真を透過
(上面画像の背景を透過するのではなく、上面画像の全体を透過)
3. 上面の画像をマウスに追従して移動
4. 上面の画像の4点を個別にマウス指定で変形
5. 1~4で出来上がった画像の合成&出力
【試したもの】(理解ミスが有るかもしれません)
※事前検討で実現困難なライブラリも小細工できないかと、念のためそれぞれ試しております。
1. 標準の機能
・アドバイスをいただき、透過はできたのですが、4の変形ができない
(画像データを変形毎に計算して求めるのは非現実的なので適用していません・・変形後も移動が有る為)
2. OpenCV
・透過処理がアルファブレンドなので、3の処理が遅い
(理想はOpenGLの様にZバッファを使用して、背景が透過するもの・・・背景を意識しない処理のみで済むもの)
・透過処理がアルファブレンドなので、同サイズの画像か背景を上面と重なる部分を検出して切り出す必要がある
(上面の画像の変形を考えると、背景を上面に合わせて切り出すのは困難)
・4が矩形しか対応していないので、ひし形までしか変形できない
(視点の変更で形状こそ求めているものに近くなるが、今回の用途ではユーザーに単純操作で変形させてあげる必要がある)
3.OpenGL
・画像単体での読み書きができない
(テクスチャマッピング機能を用いるか他のライブラリを併用する必要がある)
・平面ポリゴンを定義して、テクスチャマッピングをした場合、4の変形時にマッピング画像が追従するようにする必要がある
4.DXLib
・追加機能に対応する機能を持ってはいるが、そもそもCLIに対応していない
5.GDI+
・CLI対応のサンプルが見つからない?
(CLI以外のサンプルは多々見かけるのですが、ウインドウのハンドルやポインタの使い方が異なり、苦戦中)
・そもそも、説明しているサイトが少ない
(私のような素人がみるとどれがGDI+の記述でどれが標準の機能なのか判らないものばかり
せめてGDI+のXXXを使用すると以下のソースになるみたいな説明がされているサイトがが有れば教えてください)
6.Direct2D
※まだ検証してません
お礼
ありがとうございます そうなんですよ、既に既知の部分でSystem::Drawing::Graphicsは多様しているので、 サンプルを見て、そんままGraphicsが流用できるかと思いきや、 サンプルはGdiplus::Graphicsだったり、 その逆で、あいまい表現のエラーを回避する為に態々Gdiplus::Graphics と明記すると 実はサンプルのGraphicsがSystem::Drawing::Graphicsだったり、 せめて、ヘッダもサンプルと一緒に公開してくれていれば、 System::Drawingのクラスが併用されているか判るんですけどね。 本日からDirect2Dもテスト的に組んでみますので、 g->GetHdc() を試してみます。