实时不透明蒙版

时间:2014-09-13 03:16:47

标签: c# wpf image wpf-controls opacity

我有一组我在画布控件上绘制的图像。我希望能够实时屏蔽和取消屏幕的部分内容。

我在考虑使用WritableBitmap作为不透明度蒙版的来源,但WritableBitmaps仅限于使用1像素画笔绘制(无法更改笔触粗细)。

我能够在另一个画布上绘制所需的不透明蒙版,但是我必须不断地将该画布渲染到一个超级慢的图像源。

必须有一个简单的方法。

编辑 - 我的应用的一些细节: 我正在创建一个绘画应用程序。我在画布上绘制了一组图像。我有这些画布的集合(模拟图层系统),每个画布都有自己的图像集合。所以我试图实现一个功能来动态编辑每个画布(每个图层)的不透明蒙版。

这是

背后的集合代码集合
<!--Outer collection-->
<ItemsControl Name="canvasDataBinding"
            Focusable="True"
            HorizontalAlignment="Center" 
            Height="512"
            Width="512" 
            VerticalAlignment="Center" 
            ClipToBounds="True">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas MouseMove="Canvas_MouseMove"
                MouseEnter="Canvas_MouseEnter"
                MouseLeave="Canvas_MouseLeave"
                MouseDown="Canvas_MouseDown"
                MouseUp="Canvas_MouseUp"
                Background="Transparent">
            </Canvas>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <ItemsControl.ItemTemplate>
        <DataTemplate>

            <!--nested collection-->
            <ItemsControl Height="512" Width="512" HorizontalAlignment="Center" VerticalAlignment="Center" ItemsSource="{Binding ImageSource}" OpacityMask="{Binding Mask}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas Background="Transparent"  
                                Height="512" 
                                Width="512" 
                                HorizontalAlignment="Center" 
                                VerticalAlignment="Center">
                        </Canvas>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>

                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Name}"
                        Width="{Binding Width}"
                        Height="{Binding Height}"
                        Opacity="{Binding Opacity}">
                            <Image.RenderTransform>
                                <TransformGroup>
                                    <TranslateTransform X="{Binding OffsetX}" Y="{Binding OffsetY}"/>
                                    <RotateTransform CenterX="{Binding CenterX}" CenterY="{Binding CenterY}" Angle="{Binding Angle}"/>
                                </TransformGroup>
                            </Image.RenderTransform>
                        </Image>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

0 个答案:

没有答案