循环图像旋转WPF中最好的方法是什么

时间:2014-04-10 11:12:31

标签: c# wpf image-processing

我希望找到在wpf中执行此操作的最佳方法。我已经问过这个问题并得到了一个在opencv中实现它的答案。 round robin image rotation what is the best way to do in opencv

在wpf中执行此操作的最佳方式是什么。
显然我可以创建一个writableBitmap并手动复制像素,但我不认为这是最好的方法。

编辑1

澄清我的要求:我喜欢使用WPF实现在此SO问题(round robin image rotation what is the best way to do in opencv)中建议的相同算法。

在WPF中执行此操作的最佳方法是什么,这是有效的(内存和速度)。

1 个答案:

答案 0 :(得分:0)

您可以使用 ImageBrush 在矩形上绘图并调整画笔的 ViewPort 属性以滑动图像。如果你想用这个做动画,下面是WPF中的一个示例XAML,它使用动画自动调整画笔的视口属性并执行幻灯片动画。希望这有用。

<Window x:Class="TestWpfApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
    <Grid>
        <Rectangle>
            <Rectangle.Fill>
                <DrawingBrush x:Name="MyBrush" Viewport="0,0,1,1" TileMode="Tile">
                    <DrawingBrush.Drawing>
                        <DrawingGroup>
                            <GeometryDrawing>
                                <GeometryDrawing.Geometry>
                                    <GeometryGroup>
                                        <RectangleGeometry Rect="0,0,100,100" />
                                    </GeometryGroup>
                                </GeometryDrawing.Geometry>
                                <GeometryDrawing.Brush>
                                    <ImageBrush ImageSource="lSXfX.png" />
                                </GeometryDrawing.Brush>
                            </GeometryDrawing>
                        </DrawingGroup>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Rectangle.Fill>
            <Rectangle.Triggers>
                <EventTrigger RoutedEvent="Rectangle.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <RectAnimation
                            Storyboard.TargetName="MyBrush" 
                            Storyboard.TargetProperty="Viewport"
                            From="0 0 1 1" To="1 0 1 1" Duration="0:0:10"
                            RepeatBehavior="Forever" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Rectangle.Triggers>
        </Rectangle>
    </Grid>
</Window>