AndroidでPNG画像を使用して、ポリゴン(ポイントのコレクションで指定される)を透明に設定するにはどうすればよいですか?
1 に答える
これを実現するには、最初にBitmapFactory
:からリソースへの参照を取得する必要があります。
Bitmap my_image = BitmapFactory.decodeResource(getResources(), R.drawable.[your_image]);
次に、このsetPixels()
メソッドを使用して、透明にするPNG上の領域を定義する必要があります。透明度は、ピクセルColor
を0に設定することで達成されると思います。
ポリゴンの導出は、アプリケーションで実行する必要のある計算であり、その後、ポリゴンの寸法をsetPixels()
メソッドに渡します。この方法の使用方法については、Android開発者向けドキュメントから抜粋したこのリンクを参照してくださいsetPixels()
。
これは、PNGファイルが可変であることを前提としていることに注意してください。そうでなければあなたは得るでしょうIllegalStateException
。
N面ポリゴンの面積の導出
これはあなたの問題が非常に困難になるところです。従来の面積式は使用できないため(面積はこの例とは関係がなく、頂点が配置されている場所であるため)、透明である必要がある領域を計算する方法を理解する必要があります。
これを行う方法の1つは、ユーザーが描いた線の一部の下にあるすべてのピクセルをテストし、交差点に達するまで透明としてマークし、画像の下部に到達するまでこれを繰り返すことです。参考のためにこの図面を参照してください。
ここでのΔXは任意に定義されたピクセル長であり、精度を向上させるために増やすか、パフォーマンスを向上させるために減らすことができます。この透明性を導き出すプロセスは次のようになります。
- ユーザーが描画する頂点の一部である、最も左にある値を取得します。
- 画像を下に進めます(別のユーザー描画頂点と衝突するまでメソッドの値を減らし、
Y
現在の座標を使用して渡すときにピクセルを透明に変更します。getPixel()
setPixel()
- 別の頂点と衝突するときは、ピクセルの透明度の変更を停止しますが、列の解析を続けます。
- ここでも、別の頂点に到達した場合は、次のピクセルを透明としてマークし始めます。
- 画像の下部に到達するまでこれを繰り返します。
- 事前定義した定数ΔXでX値をインクリメントし、次の列でこれを繰り返します。
boolean
ポリゴンが「カーブアラウンド」して解析中の列に戻る可能性があるため、透明度の設定と透明度の設定なしを切り替えることが重要です(状態を維持するためにを使用できます)。