EDIT:
Приведенный ниже код не является подходящим решением, так как ProcessFrame(ProcessVideoFrameContext context)
является частью реализации интерфейса.
Мое следующее решение - создать пользовательский эффект, похожий на GaussianBlusEffect
и многие другие. Пример здесь:
https://github.com/Microsoft/Win2D-Samples/blob/master/ExampleGallery
~~~
Ниже оригинального ответа для справки.
Вы можете передать параметры X и Y и получить доступ к пикселям изображения.
public void ProcessFrame(ProcessVideoFrameContext context, int X, int Y)
{
using (CanvasBitmap inputBitmap = CanvasBitmap.CreateFromDirect3D11Surface(canvasDevice, context.InputFrame.Direct3DSurface))
using (CanvasRenderTarget renderTarget = CanvasRenderTarget.CreateFromDirect3D11Surface(canvasDevice, context.OutputFrame.Direct3DSurface))
using (CanvasDrawingSession ds = renderTarget.CreateDrawingSession())
{
Color[] Pixels = inputBitmap.GetPixelColors();
// Manipulate the array using X and Y with the Width parameter of the bitmap
var gaussianBlurEffect = new GaussianBlurEffect
{
Source = inputBitmap,
BlurAmount = (float)BlurAmount,
Optimization = EffectOptimization.Speed
};
ds.DrawImage(gaussianBlurEffect);
}
}
Подробнее: https://microsoft.github.io/Win2D/html/M_Microsoft_Graphics_Canvas_CanvasBitmap_GetPixelColors.htm
Я не проверял, является ли Color [] указателем на текущий буфер или копию. Если это копия, то вы должны записать обратно в буфер с помощью SetPixelColors.