私は Android 開発を始めたばかりで、JavaScript/HTML の世界から来たので、現在 Android SDK の可能性を調査しています。
HTML 5 キャンバスは複合操作をサポートしています (こちらを参照)。
これは Android Canvas で可能ですか? Canvas クラスの API をスキャンしましたが、有用なものが見つかりませんでした。少なくとも「source-in」または(これが不可能な場合は)「source-atop」という複合操作が必要です。
私は Android 開発を始めたばかりで、JavaScript/HTML の世界から来たので、現在 Android SDK の可能性を調査しています。
HTML 5 キャンバスは複合操作をサポートしています (こちらを参照)。
これは Android Canvas で可能ですか? Canvas クラスの API をスキャンしましたが、有用なものが見つかりませんでした。少なくとも「source-in」または(これが不可能な場合は)「source-atop」という複合操作が必要です。
Canvas
構成は、Paint
を使用するで描画することによって処理されPorterDuffXfermode
ます。
Paint p=new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
canvas.drawBitmap(bitmap, 0, 0, p);
詳細については、こちらをご覧ください。onPaint
また、この構成をテーマ自体を描画する要素に適用できるように、オーバーライドすることもできました。
自分で見つけました。PorterDuffXfermodeは、これらすべての複合モードを実装します。
このような操作はこれまで検討したことがありませんが、 Rectの形を使って行う方法はあると思います。長方形を定義して、キャンバスに描画する領域、またはソースイメージから取り出す領域をマークできます。このRect
クラスには、いくつかの比較機能が組み込まれています。たとえば、ソースインを模倣するsetIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination)
ために、新しい長方形に2つの画像の交差する領域のみを含めるように使用できます。次に、Canvasの描画コマンドの1つでその長方形を引数として使用して、その長方形の内側にあるソース画像からピクセルのみを取得するように指示できます。次に、描画コマンドが実行される順序によって、Z軸の描画を制御します。