Я пытаюсь использовать 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();
}
}