我正在尝试创建类似于Photoshop调整层的PixelShader。反转是一个简单的示例,其中它生成负像(返回1 –像素)。
我遇到的问题是将效果附加到UIElement上,并且所使用的像素来自UIElement(矩形的填充颜色,图像的源)。我想要的是来自UIElement下面的像素(其他形状,图像等)。如果移动了具有效果的UIElement,它将使用其新边界框下方的像素。
UIElement是否有某些选项可以允许这样做?还是一些UIElement / Control,就像一个传递控件,并使用下面像素中的源?我看到的唯一选择是在边框下方渲染图像并将其设置为Source。但是在移动效果或将其他元素插入到效果下方时进行管理似乎很昂贵。我所有的对象都添加到了画布中,因此可以插入,删除和移动对象。
谢谢。
//----------------------------------------
// 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>