Поворот изображения при нажатии кнопки WPF
Я включил изображения на холст в свой пользовательский элемент управления WPF:
<Canvas>
<Thumb Canvas.Left="19" Canvas.Top="-7" Canvas.ZIndex="99" DragDelta="Thumb_DragDelta">
<Thumb.Template>
<ControlTemplate>
<Image Name="Image1" Source="/Images/Image1.png" Height="120" Width="242" Margin="63,180,696,393" />
</ControlTemplate>
</Thumb.Template>
</Thumb>
<Thumb Canvas.Left="52" Canvas.Top="6" DragDelta="Thumb_DragDelta">
<Thumb.Template>
<ControlTemplate>
<Image Name="Image2" Source="/Images/Image2.png" Height="120" Width="205" Margin="760,184,74,397" />
</ControlTemplate>
</Thumb.Template>
</Thumb>
<Thumb Canvas.Left="21" DragDelta="Thumb_DragDelta" Canvas.Top="-18">
<Thumb.Template>
<ControlTemplate>
<Image Name="Image3" Source="/Images/Image3.png" Height="124" Width="260" Margin="82,426,697,151" />
</ControlTemplate>
</Thumb.Template>
</Thumb>
<Thumb Canvas.Left="30" Canvas.Top="1" DragDelta="Thumb_DragDelta">
<Thumb.Template>
<ControlTemplate>
<Image Name="Image4" Source="/Images/Image4.png" Height="124" Width="255" Margin="744,341,39,236" />
</ControlTemplate>
</Thumb.Template>
</Thumb>
</Canvas>
Затем я включил в код следующее, чтобы эти изображения большого пальца можно было перемещать по экрану, что прекрасно работает.
// Move images on canvas
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
UIElement thumb = e.Source as UIElement;
Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) + e.HorizontalChange);
Canvas.SetTop(thumb, Canvas.GetTop(thumb) + e.VerticalChange);
}
Кто-нибудь знает быстрое добавление, где я могу добавить к этому коду большими пальцами на холсте, чтобы у меня была возможность вращать эти изображения одним нажатием кнопки в разных направлениях и под разными углами?
Спасибо
2 ответа
Вы можете назначить RotateTransform для RenderTransform
свойство ваших пальцев и изменить Angle
RotateTransform в обработчике событий:
<Thumb Canvas.Left="52" Canvas.Top="7" RenderTransformOrigin="0.5,0.5"
DragDelta="Thumb_DragDelta" MouseDoubleClick="Thumb_MouseDoubleClick">
<Thumb.RenderTransform>
<RotateTransform/>
</Thumb.RenderTransform>
<Thumb.Template>
...
</Thumb.Template>
</Thumb>
Обработчик события может выглядеть так:
private void Thumb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var thumb = e.Source as UIElement;
var transform = thumb.RenderTransform as RotateTransform;
transform.Angle += 90;
}
Однако вы должны изменить большой Margin
значения на пальцах, так как они влияют на центр вращения.
Canvas container = new Canvas();
container.Children.Add(image);
container.Arrange(new Rect(0, 0, source.PixelWidth, source.PixelHeight));
// render the result to a new bitmap.
RenderTargetBitmap target = new RenderTargetBitmap(targetWidth, targetHeight, sourceDpiX, sourceDpiY, PixelFormats.Default);
target.Render(container);
RenderTargetBitmap можно использовать вместо BitmapSource в любом элементе управления.