2

私は Nokia Imaging SDK のクラスを調査してCustomEffectBaseおり、彼らが持っている RealtimeFilterDemo サンプルにこれらを追加することに取り組んできましたが、彼らの Filter Explorer Demo にも効果を追加したいと考えています。これを行う方法がわかりません。CustomEffectBase を使用してカスタム効果を作成しました

InvertCustomEffect.cs

public class InvertCustomEffect : CustomEffectBase
{
    public InvertCustomEffect(IImageProvider source) : base(source)
    {
    }

    protected override void OnProcess(PixelRegion sourcePixelRegion, PixelRegion targetPixelRegion)
    {
        var sourcePixels = sourcePixelRegion.ImagePixels;
        var targetPixels = targetPixelRegion.ImagePixels;

        sourcePixelRegion.ForEachRow((index, width, position) =>
        {
            for (int x = 0; x < width; ++x, ++index)
            {

                uint pixel = sourcePixels[index];
                uint blue = pixel & 0x000000ff; // blue color component
                uint green = (pixel & 0x0000ff00) >> 8; // green color component
                uint red = (pixel & 0x00ff0000) >> 16; // red color component
                uint average = (uint)(0.0722 * blue + 0.7152 * green + 0.2126 * red); // weighted average component
                uint grayscale = 0xff000000 | average | (average << 8) | (average << 16); // use average for each color component

                targetPixels[index] = ~grayscale; // use inverse grayscale
            }
        });
    }
}

これは基本的なグレースケール反転効果です。フィルター エクスプローラー プロジェクトには、実行する効果が入力される FilterModel.cs というモデルがあります。問題は、SDK に付属している標準エフェクトには ints や doubles などの引数があり、これらはエフェクトを調整するための単なるパラメーターですが、作成した CustomEffectBase を拡張するクラスにはIImageProvider source引数として必要です。これは私が立ち往生している場所であり、フィルター エクスプローラー プロジェクト内でこれを実装して、ここから先に進む方法がわかりません。

FilterModel.cs

public class InvertGrayscaleFilterModel : FilterModel
{
    public InvertGrayscaleFilterModel()
    {
        Name = "Invert Grayscale";
    }

    [XmlIgnore]
    public override Queue<IFilter> Components
    {
        get
        {
            Queue<IFilter> components = new Queue<IFilter>();

            components.Enqueue(new FilterAppTest.Filters.InvertCustomEffect()); //error requiring IImageProvider source

            return components;
        }
    }
}
4

1 に答える 1