ch.kuramo.javie.api.services
インタフェース IBlendSupport


public interface IBlendSupport

描画モードを用いた合成処理を支援するサービスです。 このサービスはシングルトンではないため、インジェクトするごとに新しいインスタンスが生成されます。

描画モードのデフォルトの実装は、上になる画像および下になる画像がどちらも乗算済みアルファの場合のものです。 上になる画像がストレートアルファである場合、getUnmultSrcClass() メソッドで実装を取得し、 それを setProgramsClass(Class) メソッドに渡すことで描画モードの実装を変更することができます。 また、replace(BlendMode, IShaderProgram) メソッドを用いると、描画モード単位で実装を変更 することができます。例えば、フラクタルノイズエフェクトは色相と彩度の実装を独自のものに置き換えています。


メソッドの概要
 IVideoBuffer blend(IVideoBuffer src, IVideoBuffer dstIn, IVideoBuffer dstOut, BlendMode blendMode, double opacity)
           
 IVideoBuffer blend(IVideoBuffer src, IVideoBuffer dstIn, IVideoBuffer dstOut, BlendMode blendMode, double opacity, IVideoEffectContext context)
           blendMode で指定した描画モードを用いて dstIn の上に src を合成し、dstOut に結果を出力します。
 IVideoBuffer dissolve(IVideoBuffer src, IVideoBuffer dstIn, IVideoBuffer dstOut, double opacity, double seed)
           
 java.lang.Class<?> getPremultAndMatteClass(boolean normalCategory)
          上になる画像および下になる画像がどちらも乗算済みアルファであり、 下になる画像のアルファチャンネルがマットでもある場合の描画モードの実装を取得します。
 java.lang.Class<?> getUnmultSrcClass()
          上になる画像がストレートアルファ、下になる画像が乗算済みアルファである場合の描画モードの実装を取得します。
 void replace(BlendMode blendMode, IShaderProgram program)
          blendMode で指定した描画モードの実装を、 program のシェーダプログラムに置き換えます。
 void setProgramsClass(java.lang.Class<?> programsClass)
          描画モードの実装を programsClass のクラスが持つものに全て置き換えます。
 

メソッドの詳細

getUnmultSrcClass

java.lang.Class<?> getUnmultSrcClass()
上になる画像がストレートアルファ、下になる画像が乗算済みアルファである場合の描画モードの実装を取得します。

戻り値:
描画モードの実装を持つクラスオブジェクト

getPremultAndMatteClass

java.lang.Class<?> getPremultAndMatteClass(boolean normalCategory)
上になる画像および下になる画像がどちらも乗算済みアルファであり、 下になる画像のアルファチャンネルがマットでもある場合の描画モードの実装を取得します。 ただし、描画モード「ステンシルアルファ」「ステンシルルミナンス」「シルエットアルファ」「シルエットルミナンス」 の実装は下になる画像のアルファチャンネルをマットとみなさず、デフォルトの実装と同じになります。 また、引数 normalCategoryfalse にすると、 描画モード「なし」「通常」「ディザ合成」「ダイナミックディザ合成」もデフォルトの実装と同じになります。

パラメータ:
normalCategory - 描画モード「なし」「通常」「ディザ合成」「ダイナミックディザ合成」の実装がデフォルトの実装と同じなら false、そうでないなら true
戻り値:
描画モードの実装を持つクラスオブジェクト
導入されたバージョン:
0.5.6

setProgramsClass

void setProgramsClass(java.lang.Class<?> programsClass)
描画モードの実装を programsClass のクラスが持つものに全て置き換えます。 programsClass のクラス内で、BlendMode.DANCING_DISSOLVE を除くすべての描画モードに対してシェーダプログラムが定義されている必要があります。

パラメータ:
programsClass - 描画モードの実装をもつクラスオブジェクト

replace

void replace(BlendMode blendMode,
             IShaderProgram program)
blendMode で指定した描画モードの実装を、 program のシェーダプログラムに置き換えます。

パラメータ:
blendMode - 実装を置き換える描画モード
program - 描画モードのシェーダプログラム

blend

IVideoBuffer blend(IVideoBuffer src,
                   IVideoBuffer dstIn,
                   IVideoBuffer dstOut,
                   BlendMode blendMode,
                   double opacity,
                   IVideoEffectContext context)

blendMode で指定した描画モードを用いて dstIn の上に src を合成し、dstOut に結果を出力します。 opacitysrc の不透明度を指定することができます。

dstOutnull を指定した場合、dstIn と同じ位置とサイズで出力バッファが作成され、戻り値に返されます。

blendModeBlendMode.DISSOLVE または BlendMode.DANCING_DISSOLVE の場合、実行中のエフェクトのコンテキストを 引数 context に与える必要があります。これは、コンテキストから乱数のシードを決定するためです。 シードを明示的に指定する場合は dissolve(IVideoBuffer, IVideoBuffer, IVideoBuffer, double, double) メソッドを使用してください。

パラメータ:
src - 上になる画像
dstIn - 下になる画像
dstOut - 合成の結果を出力するバッファ
blendMode - 合成に用いる描画モード
opacity - src の不透明度
context - 実行中のエフェクトのコンテキスト
戻り値:
dstOutnull の場合は新たに作成されたバッファ、そうでない場合は dstOut

blend

IVideoBuffer blend(IVideoBuffer src,
                   IVideoBuffer dstIn,
                   IVideoBuffer dstOut,
                   BlendMode blendMode,
                   double opacity)

dissolve

IVideoBuffer dissolve(IVideoBuffer src,
                      IVideoBuffer dstIn,
                      IVideoBuffer dstOut,
                      double opacity,
                      double seed)