我目前正在创建一个 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
}
}
这会绘制一个围绕图像区域的形状,然后是给定的形状,然后返回起点。
这种方法的问题在于它创建了非常奇怪的形状,并且不透明蒙版的渐变似乎使一个区域变白而不是使其余区域变暗。
我不太担心从黑暗逐渐转变为形状,只要我能找到一种解决方案,使形状周围的区域变暗但仍然显示下面的幻灯片,我会很高兴地离开。提前致谢。