CropEffect фактически не обрезает лишнее обрезанное изображение и допускает «переполнение» - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь использовать Lumia.Imaging SDK CropEffect в сочетании с BlendEffect для обрезки одного изображения и наложения на другое.

Эта проблема, в то время как CropEffect, кажется, принимает мой прямоугольник и выводит изображение с активной областью, установленной на то, чем является мой прямоугольник, на самом деле оно не обрезает лишнее значение, когда я масштабирую и возвращаемый объект IImageProvider с использованием BlendEffect.TargetArea () Видна лишняя обрезанная часть изображения.

Как я могу либо полностью обрезать внешнюю часть моего урожая, либо настроить BlendEffect, чтобы игнорировать область вне моего прямоугольника?

предположим, что мои cropRect, которые я кормлю, обрезают ширину моего входного кадра на% 50, тогда TargetArea должен центрировать этот обрезанный участок, но вместо этого область справа, которая должна быть обрезана, продолжает и покрывает фон.

class ForgroundAndBackgroundBlendEffect : EffectGroupBase
{
    private BlendEffect _blendEffect;
    private BlendEffect _forgroundOverlayEffect;
    private ChromaKeyEffect _chromakeyEffect;
    private CropEffect _cropEffect;
    public ForgroundAndBackgroundBlendEffect(Color color, double colorDistance, double noiseSuppression, Rect cropRect)
    {
        _cropEffect = new CropEffect(cropRect);

        _chromakeyEffect = new ChromaKeyEffect(color, colorDistance, noiseSuppression);
        _chromakeyEffect.Source = _cropEffect;

        _blendEffect = new BlendEffect();
        _blendEffect.ForegroundSource = _chromakeyEffect;
        _blendEffect.TargetArea = new Rect(new Point(.25, 0), new Point(.75, 1));

        _forgroundOverlayEffect = new BlendEffect();
        _forgroundOverlayEffect.Source = _blendEffect;
    }

    public IImageProvider BackgroundSource
    {
        get { return _blendEffect.Source; }
        set { _blendEffect.Source = value; }
    }

    public IImageProvider ForgroundSource
    {
        get { return _forgroundOverlayEffect.ForegroundSource; }
        set { _forgroundOverlayEffect.ForegroundSource = value; }
    }

    protected override IImageProvider PrepareGroup(IImageProvider groupSource)
    {
        _cropEffect.Source = groupSource;
        return _forgroundOverlayEffect;
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        _forgroundOverlayEffect.Dispose();
        _blendEffect.Dispose();
    }
}
...