我当前正在创建一个pdf查看器,如果用户将光标移动到当前幻灯片的许多感兴趣领域之一(在外部文件中定义),其余的幻灯片将变暗,突出该区域。
当前,这些感兴趣的领域是路径形状,使用Geometry.Parse()
方法使用外部文件中提供的信息并存储在List<List<Path>>
中。
此阴影的当前XAML如下:
<Image Name="SlideImage" HorizontalAlignment="Left" VerticalAlignment="Top">
<Image.OpacityMask>
<DrawingBrush Opacity="0.4">
<DrawingBrush.Drawing>
<GeometryDrawing x:Name="ShadeGeometry">
<GeometryDrawing.Brush>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Offset="1" Color="Black"/>
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="Black"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Image.OpacityMask>
<Image>
图纸的几何形状通过以下方法更改:
public void ShadeCommand(ref GeometryDrawing ShadeGeometry, int page, int shape)
{
if (page < commands.Count && shape < commands[page].Count)
{
ShadeGeometry.Geometry = Geometry.Parse(
"M 0,0 " + "H " + resolution.X + " V " + resolution.Y +
" H 0 V 0 L " + commands[page][shape].Substring(2) + " Z");
}
else
{
ShadeGeometry.Geometry = null; //Geometry.Empty
}
}
这绘制了围绕图像区域的形状,然后在返回起点之前给定的形状。
这种方法的问题是它会产生非常奇怪的形状,而不透明度面膜的梯度似乎使区域变白而不是使其他区域变暗。
我不太担心从黑暗转变为形状的逐渐转变,只要我能找到一个可以使形状周围区域变暗的解决方案,但仍然显示下面的滑梯,我会很高兴。预先感谢。
使用半透明的黑色路径元素覆盖图像可能会更容易,该元素使用由足够大的RectangleGeometry
和排除的PathGeometry
组成的CombinedGeometry
。
这样:
<Grid>
<Image Source="C:UsersPublicPicturesSample PicturesKoala.jpg" Stretch="None"/>
<Path Fill="Black" Opacity="0.5">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry Rect="0,0,10000,10000"/>
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<PathGeometry Figures="M 280,375 l100,-50 100,50 -100,50z"/>
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
</Grid>
您现在可以在编程中调整 CombinedGeometry.Geometry2
中的pathgeemetry(或可能的流域)。