1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Skiaの実践:ブレンドモード

Last updated at Posted at 2025-11-08

Skiaは、CSSで使用されるmix-blend-modeに対応する多くのブレンドモードをサポートしています。

ブレンドモードの設定方法

直接描画時に指定する方法

ペイントのBlendModeプロパティにブレンドモードを指定して描画します。

// まずは背景(Dst)を描画
canvas.DrawImage( imageDst, 0, 0 );

// 次にブレンドモードを指定して前景(Src)を描画
using var paint = new SKPaint() {
    BlendMode = SKBlendMode.Screen  // ブレンドモードを指定
};
canvas.DrawImage( imageSrc, 0, 0, paint );

描画レイヤーに指定する方法

描画レイヤーを作成して、そのレイヤーにブレンドモードを指定します。レイヤー内で行われた描画は、元のキャンバスに戻される際に指定されたブレンドモードで合成されます。

// まずは背景(Dst)を描画
canvas.DrawImage( imageDst, 0, 0 );

// ブレンドモードを指定して描画レイヤーを作成
using var paint = new SKPaint() {
    BlendMode = SKBlendMode.Screen  // ブレンドモードを指定
};
canvas.SaveLayer( paint );

// 前景(Src)を描画(ここではペイントは不要)
canvas.DrawImage( imageSrc, 0, 0 );

// 描画レイヤーを元に戻す
canvas.Restore();

イメージフィルターに指定する方法

イメージフィルターのCreateBlendModeメソッドでブレンドモードを指定してフィルターを作成し、二つのフィルターを合成します。
(簡単な例を思いつかいので、ここではコードは省略します。)

主なブレンドモードの紹介

あまりにも多いので、ここでは、アプリ上の描画処理で使いそうなものをピックアップして紹介します。

SrcOver

デフォルトのブレンドモードです。前景(Src)が背景(Dst)の上にそのまま描画されます。前景の透明度が考慮されます。

blend_SrcOver.png

Screen

前景(Src)と背景(Dst)の色を反転し、乗算した後に再度反転します。というと難しいですが、結果的に前景が明るく合成されます。光を重ねたような表現に適しています。

blend_Screen.png

Plus

前景(Src)と背景(Dst)の色を単純に加算します。Screenと似ていますが、より明るい効果が得られます。

blend_Plus.png

SoftLight

背景(Dst)を暗くしたり明るくしたりする効果があります。前景(Src)の色に応じて、背景がソフトに変化します。

blend_SoftLight.png

Overlay

SoftLightに似ていますが、よりコントラストの強い効果があります。

blend_Overlay.png

SrcIn

背景(Dst)のアルファ値を前景(Src)に適用します。背景の色は無視され、背景の形状で前景が切り抜かれたような効果があります。

blend_SrcIn.png

DstIn

SrcInの逆順です。前景(Src)のアルファ値を背景(Dst)に適用します。前景の色は無視され、前景の形状で背景が切り抜かれたような効果があります。

blend_DstIn.png


総合目次

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?