C# ( 4.7.2 ) で 2 つの画像を結合し、上部の画像を変換して、画像の特定の座標に 4 つのコーナーのそれぞれを配置する必要があります。
それは可能ですか?できれば、多額の費用を必要としないソリューションを使用してください。私が知る限り、Bitmap/Graphics クラスではできません。
C# ( 4.7.2 ) で 2 つの画像を結合し、上部の画像を変換して、画像の特定の座標に 4 つのコーナーのそれぞれを配置する必要があります。
それは可能ですか?できれば、多額の費用を必要としないソリューションを使用してください。私が知る限り、Bitmap/Graphics クラスではできません。
質問を正しく理解していれば、GDI+やWPFで使用されるようなアフィン変換であるシア(またはスキュー)は、あなたが望むことをする可能性は低いです。シアー/スキューを使用すると、変換された座標空間は依然として平行四辺形ですが、画像では元の長方形が任意に縮小または拡大されます。
それが正しいと仮定すると、WPF Media3D名前空間 (.NET コンテキストで最もアクセスしやすい 3D API であるという理由だけで WPF) の機能を使用することをお勧めします。特に、元のビットマップであるテクスチャを定義する必要があります。次に、目的に応じて十分な解像度 (つまり、三角形) で 3D 座標空間に四角形の 2D サーフェスを定義し (以下を参照)、そのサーフェスの三角形は、最終的なイメージとして必要な形状をテッセレーションすることによって構築されます。テッセレーションの結果として生じる頂点全体で、そのシェイプのテクスチャ (UV) 座標を補間した場所。
実際に必要な三角形の数は、目的の品質によって異なります。理論的には、2 つだけを使用できます。これが最も簡単な方法で、元の 4 つのコーナーしかないため、UV 座標を決定するのは簡単です。しかし、2 つの三角形が交わる対角線に沿って視覚的な不連続性が生じます。ここでは、三角形が互いに直角でないために、テクスチャ ピクセルの補間の方向が変わります。
より良い結果を得るには、より多くの三角形を使用する必要があります。しかし、これは UV 座標の割り当てを複雑にします。このサーフェスの内部頂点ごとに、サーフェス全体を補間する必要があります。これは、最初に四角形を反対側を接続する線で細分化してテッセレーションを生成し (これにより、交差する線で囲まれた小さな内部四角形が形成されます)、それらの四角形のそれぞれを三角形のペアに分割する場合に、おそらく簡単に実行できます。このようにすると、各線に沿った距離を使用して、線が通過する各頂点の適切な U または V 座標を決定できます。
適切なテクスチャとジオメトリを作成したら、結果をクラスRenderTargetBitmap
経由でレンダリングし、そのビットマップで必要なことを行うのは簡単なことです。Viewport3DVisual
さて、以上のことは…</p>
シアー/スキューがニーズに十分であるように問題を単純化できることが判明した場合は、バイナリ イメージのデスキュー文字を参照してください。その特定の例では、光学効果によって引き起こされたスキューを元に戻そうとしていますが、スキューはスキューです。どちらの方向にもまったく同じ原理が機能します。
あなたの問題がシェア/スキューアプローチに適していない場合でも、独自のソリューションを実装する前に (たとえば、上記の概要に基づいて)、他の利用可能なツールを検討することをお勧めします。一部のオプションに関する情報は、たとえば、C# での画像の変更 (クロッピングと歪み補正)および画像の比較 - 回転、配置、スケーリング に記載されています。