エフェクト

描画オブジェクトにフィルタなどの処理を追加します。 以下に実装されているエフェクトを挙げます。

123
BlurBorderDropShadow
InnerShadowDilateErode
HueRotateHighContrastLighting
LumaColorSaturateTransform
CvBlurCvGaussianBlurCvMedianBlur

これらはSkiaやOpenCVを用いて実装されており、重複したものもあります。

エフェクトの適用プロセス

エフェクトは次の3つの種類に分けられます。

  1. 画像フィルタ
  2. 色フィルタ
  3. カスタムエフェクト

画像フィルタとはBlurやDropShadowなどのことです。 実装はSkImageFilterです。 画像フィルタは他の画像フィルタと合成できます。

色フィルタとはHueRotateやHighContrastなどのことです。 実装はSkColorFilterです。 また、色フィルタは画像フィルタに変換できます。

カスタムエフェクトとはCvBlurなど他のライブラリを使ったエフェクトのことです。 カスタムエフェクトを適用するにはラスター化された画像が必要です。

色フィルタ
画像フィルタ
画像フィルタ
カスタムエフェクト
カスタムエフェクト

これらのエフェクトを実際の処理と同じ流れで、最適化していきます。

色フィルタを画像フィルタに変換します。

画像フィルタ
画像フィルタ
画像フィルタ
カスタムエフェクト
カスタムエフェクト

画像フィルタを他の画像フィルタと合成します。

画像フィルタx3
カスタムエフェクト
カスタムエフェクト

あとは、画像フィルタx3を適用して、ラスター化したものに カスタムエフェクトを適用すると完了です。

実際にはエフェクトによって境界線が変わったり、 キャッシュのために画像フィルタの合成は後回しにしています。

GitHub LogoGitHubで表示この記事のソースはGitHubにあります。<br />改善点があればIssueやPull requestを開いてください。