上記の画像から、赤い長方形の後ろの部分が必要な場合は簡単に取得できますが、黄色の長方形の後ろの部分が回転しているため取得できないという問題があります。
では、回転した形状から画像の一部を取得するにはどうすればよいでしょうか?
たとえば、私の目標は、長方形が画像上にある画像の一部を取得することです。誰かがこの長方形を x 度 [どの方向でも] 回転させると、回転を適用した後に画像の正確な部分を抽出することが難しくなります。
助言がありますか?
上記の画像から、赤い長方形の後ろの部分が必要な場合は簡単に取得できますが、黄色の長方形の後ろの部分が回転しているため取得できないという問題があります。
では、回転した形状から画像の一部を取得するにはどうすればよいでしょうか?
たとえば、私の目標は、長方形が画像上にある画像の一部を取得することです。誰かがこの長方形を x 度 [どの方向でも] 回転させると、回転を適用した後に画像の正確な部分を抽出することが難しくなります。
助言がありますか?
Mihir さん、この課題の回転/AffineTransform の側面に気を取られて、間違った道に進んでいると思います。また、ここでの「取得」の意味がよくわからないことにも注意してください。強調表示された領域を画像に保存しますか? 別の画像の透かしとしてレンダリングしますか? など...私はあなたを正しい道に導くために、一般的なケースで答えようとします.
必要なのは、上の画像の黄色の多角形で定義された画像のコンテンツです。回転した長方形のように見えるという事実を無視します。
遅れており、ここでステップが欠落していますが、これで 90% の方法が得られ、必要な最後の部分 (Graphics2D.setClip) が明確になると思います。
注: ここで私の記憶が失われます。ある時点で newG2 ( newG2.setClip(someShape) )にクリップを設定する必要があるため、バウンディング ボックスがレンダリングされたときに、レンダリングされたグラフィックスの完全なバウンディング ボックスを取得するのではなく、によって定義された一部のサブセットを取得します。黄色い輪郭。
これを行う簡単な方法の 1 つは、2 つのポリゴンを作成することです。
poly1 は、バウンディング ボックスを取得して、黄色で選択されたコンテンツ (およびその周囲の余分なコンテンツ) を囲む完全なバウンディング ボックスをコピーするために使用されます。
poly2 は、ターゲット Graphics2D (newG2) にクリップを設定するために使用されるため、バウンディング ボックスがそこにレンダリングされるときに、黄色の形状の外側にあるすべてのものを切り取って、黄色のコンテンツだけを取得します。ARGB イメージ タイプを使用し、ターゲット イメージの背景を透明に設定することをお勧めします。そうしないと、塗りつぶしの色が黒になります。
これはクリップの正しい方向だと思います。私は何年にもわたって Java2D に目を光らせていましたが、しばらくの間 Java2D から離れていました。微調整する必要があるかもしれませんが、必要なツールはこれだけです。
ここでは、可能なアプローチのより長い説明があります。私は Java2D 描画 API についてよく知りませんが、正しく覚えていれば、必要なことを実行する機能を備えています。
最初に、画像の左上隅にまっすぐに配置された同じサイズの長方形と比較して、必要なサブ領域の移動と回転を把握する必要があります。次に、この変換を反転します。
メモリ内のビットマップに基づくグラフィックス コンテキストを作成します。これは、必要なサブイメージのサイズを持つ必要があります。コンテキストで前に計算した逆変換を設定し、位置 0,0 に画像を描画します。Java2D は変換を考慮に入れるため、必要なサブイメージをメモリ ビットマップに取得する必要があります。