Я пытаюсь создать PixelShader, похожий на корректирующий слой Photoshop. Инвертировать это простой пример, где он генерирует негативное изображение (возврат 1 - пиксель).
Проблема, с которой я столкнулся, заключается в том, что вы присоединяете эффект к элементу UIElement, а используемые пиксели взяты из элемента UIElement (цвет заливки для прямоугольника, источник для изображения). Я хотел бы, чтобы пиксели были ниже UIElement (другие фигуры, изображения и т. Д.). Если UIElement, имеющий эффект, перемещается, он использует пиксели под новым ограничивающим прямоугольником.
Есть ли какая-либо опция, которая есть в UIElement, которая позволяет это? Или какой-нибудь UIElement / Control, который похож на сквозной элемент управления и использует его источник из пикселей ниже? Единственный вариант, который я вижу, - визуализировать изображение под ограничительной рамкой и установить его в качестве источника. Но управлять этим, когда он перемещается или другой элемент вставляется ниже, Эффекты кажутся дорогими. Все мои объекты добавляются в Canvas, поэтому объекты можно вставлять, удалять и перемещать.
Спасибо.
//----------------------------------------
// Pixel Shader
//----------------------------------------
sampler2D implicitInput : register(s0);
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 imagePixel = tex2D(implicitInput, uv);
imagePixel.g = 1 - imagePixel.g;
imagePixel.b = 1 - imagePixel.b;
imagePixel.r = 1 - imagePixel.r;
return imagePixel;
}
<!—I don’t want to have a Source but want the data used below the bounding box
<Image Name="MyInvertEffect" Width="400" Height="400"
Source="/Images/BlackWihiteGray.png"
Effect="{StaticResource invertEffect}"
>
</Image>