2016-10-26 10 views
2

タイトルには、Bitmap(またはAndroidのPath)を任意のポリゴンに伸ばすのに役立つアルゴリズム、コード、またはライブラリが必要です。多角形は、x,y座標のリストで与えられます。実際にはxy座標で与えられているPathオブジェクトをAndroidで変換/伸張する必要があります。私はBitmapと言いました。誰かが似たような問題を抱えている可能性が高いので、私は両方が私のものに変換されると仮定します。Matrix Matrix.setPolyToPoly(...)を使ってみましたが、それは四角形)任意のポリゴンではありません。Android、Java:任意のポリゴンへのビットマップまたはパスの拡張

わかりやすい説明のために、画像をご覧ください。それは正確な変換ではなく、近いものです。画像全体が星型のポリゴンに引き伸ばされていることに注意してください。マスクではなく、トリムではなく、ピクセルの遷移だけです。 enter image description here

答えて

1

私は、この全体に走った昨日、その後、数日前にあなたの質問を見た:

Canvas#drawBitmapMesh | Android Developers

それは把握するのは難しいのようなものだが、私はそれを理解する方法は、あなたが仮想弾性で始まりますあなたのビットマップ上にグリッド。ビットマップをワーピングする方法は、グリッドのx、y点を別の場所に移動することで表現できます。

Here's an article with a diagramおよびhere's an article with some sample code

明らかに、難しい部分はフレームポリゴンを取り、それを使ってメッシュ内のワープした頂点を生成することです。それはいくつかの魅力的な数学を取るかもしれません。しかし、私はこれが正しい方向への一歩となると考えました。私は、星型多角形を見ていると私は出発点(ない正方形)のように円を描いています:

これは私が想定したものです。星が円を取って、向かって中心から離れてそれにポイントを伸ばして見ることができます。どのような方法で伸ばされたとしても、中央のゼロからストレッチポイントで最も強いベクタが生成されます。

Pathの場合は、パス内のポイントにベクトルを適用することもできますが、線も曲がっていなければならないので、これはベジェ曲線のかなり畳み込まれた数式になります。私はどんな種類の数学者でもない)。あなたはBitmapPathを描いた場合

しかし、あなたはより良い位置にあるかもしれません。さまざまなベクトルを使用してメッシュの頂点を変更するだけで、Canvas.drawBitmapMesh()を使用して最終結果をレンダリングすることができます。

+0

おかげ@kris。それは価値があることを見て、確かに解決への一歩前進することができます。現在、私はいくつかの良い結果を得れば、私が更新をポストするポリゴン三角測量に基づいたソリューションを構築しています。 – Vilen

関連する問題