BackdropFilterを使わずに画像にblurをかける
"flutter Image blur"で検索してもBackdropFilter
の記事しか出ないのでカッとなって書いた。画像にボケと透明度を同時に適用したいとか、BackdropFilter
だとボケの感じが思ってたのとなんか違うなという時にどうぞ。
ImageFiltered( imageFilter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), child: Image.network('...', // dst color: Colors.white.withOpacity(0.5), // src colorBlendMode: BlendMode.lighten, // 重ねる色に合わせていい感じになるやつを選んでください ), )
私の場合は、
- 画像にボケをかけたい ->
BackdropFilter
を使いたまえ Widget
のグループを半透明にしたい ->Opacity
で包みたまえ
の合わせ技で、リストに入っているというのも効いたのか、ボケと半透明が適用された画像が表示されないことがあった。
ここでの問題点は、BackdropFilter
自体が結構重い処理*1なのに加えて、さらにOpacity
もまたそれなりに重い*2ということで、これを解決したければ、Opacity
のページにも書いてあるようにImage
のプロパティを使って透過度を適用するのが軽くてよいらしい。私はPorter-DuffのBlendModeをつかって適用+ImageFiltered
のblurで解決したが、もっと簡単な方法もあるかもしれない。
*1: https://api.flutter.dev/flutter/widgets/BackdropFilter-class.html のサンプルコードの下あたりを参照。
*2: https://api.flutter.dev/flutter/widgets/Opacity-class.html のサンプルコードの下あたりを参照。offscreen bufferを使うことになって重いし、画面の再描画処理も走るので古いGPUの端末では遅くなりそうみたいなことが書いてある。