您的位置:首页 > 编程语言 > C#

c# WPF 中图片缩放功能,鼠标拖动位置

2015-06-30 17:24 543 查看
<Window x:Class="LJDX.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:flash="clr-namespace:AxShockwaveFlashObjects;assembly=AxInterop.ShockwaveFlashObjects"

xmlns:wf="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

Loaded="WindowLoadedEvent"

WindowState="Maximized"

WindowStyle="None">

<Grid>

<Grid.RowDefinitions>

<RowDefinition Height="*" />

<RowDefinition Height="50" />

</Grid.RowDefinitions>

<wf:WindowsFormsHost Name="wform" Grid.RowSpan="2">

<flash:AxShockwaveFlash x:Name="flash" FSCommand="fsCommandEvent" />

</wf:WindowsFormsHost>

<Grid x:Name="IMG"

Grid.RowSpan="2"

Visibility="Hidden">

<Grid.RowDefinitions>

<RowDefinition Height="*" />

<RowDefinition Height="100" />

</Grid.RowDefinitions>

<Grid.Resources>

<TransformGroup x:Key="Imageview">

<ScaleTransform />

<TranslateTransform />

</TransformGroup>

</Grid.Resources>

<ContentControl x:Name="contCtl"

Grid.RowSpan="2"

MouseLeftButtonDown="IMG1_MouseLeftButtonDown"

MouseLeftButtonUp="IMG1_MouseLeftButtonUp"

MouseMove="IMG1_MouseMove"

MouseWheel="IMG1_MouseWheel">

<Border x:Name="Imgbd">

<Image Name="IMG1"

RenderOptions.BitmapScalingMode="NearestNeighbor"

RenderTransform="{StaticResource Imageview}"

Stretch="Uniform" />

</Border>

</ContentControl>

<StackPanel Grid.Row="1"

HorizontalAlignment="Center"

Orientation="Horizontal">

<Image Name="buttonLarger"

MouseDown="button2_Click"

Source="./res/larger.png"

Stretch="Fill"

/>

<!--<Button Name="button4"

Width="80"

Height="40"

Click="button4_Click"

Content="原图"

FontSize="24" />-->

<Image Name="buttonClose"

Source =".\res\close.png"

MouseDown="buttonClose_Click"

Stretch="Fill"

/>

<Image Name="button3"

Source =".\res\smaller.png"

MouseDown="button3_Click"

Stretch="Fill"

/>

</StackPanel>

</Grid>

</Grid>

</Window>

=======================================》》》

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace LJDX

{

/// <summary>

/// MainWindow.xaml 的交互逻辑

/// </summary>

public partial class MainWindow : Window

{

string picPath;

private bool mouseDown;

private Point mouseXY;

public MainWindow()

{

InitializeComponent();

}

//falsh消息事件

private void fsCommandEvent(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)

{

switch (e.command){

case "1":

wform.Visibility = Visibility.Collapsed;

IMG.Visibility = Visibility.Visible;

picPath = Environment.CurrentDirectory + @"\IMGS\1.jpg";

IMG1.Source = new BitmapImage(new Uri(picPath, UriKind.Absolute));

originImg();

break;

default:

break;

}

}

private void WindowLoadedEvent(object sender, RoutedEventArgs e)

{

string flashPath = Environment.CurrentDirectory + @"\FLASH\gd.swf";

flash.Movie = flashPath;

}

//图片放大

private void button2_Click(object sender, RoutedEventArgs e)

{

IMG1.RenderTransformOrigin = new Point(0.5, 0.5);

var img = sender as ContentControl;

var group = IMG.FindResource("Imageview") as TransformGroup;

var transform1 = group.Children[1] as TranslateTransform;

var transform0 = group.Children[0] as ScaleTransform;

transform0.ScaleX += transform0.ScaleX * 2.4;

transform0.ScaleY += transform0.ScaleY * 2.4;

}

//图片缩小

private void button3_Click(object sender, MouseButtonEventArgs e)

{

//IMG1.RenderTransformOrigin = new Point(0.5, 0.5);

//var img = sender as ContentControl;

//var group = IMG.FindResource("Imageview") as TransformGroup;

//var transform1 = group.Children[1] as TranslateTransform;

//var transform0 = group.Children[0] as ScaleTransform;

//transform0.ScaleX -= transform0.ScaleX * 0.5;

//transform0.ScaleY -= transform0.ScaleY * 0.5;

originImg();

}

//按钮 【原图】

private void button4_Click(object sender, RoutedEventArgs e)

{

var img = sender as ContentControl;

var group = IMG.FindResource("Imageview") as TransformGroup;

//初始化位置

var translateTrans = group.Children[1] as TranslateTransform;

translateTrans.X = 0;

translateTrans.Y = 0;

//初始化缩放比例

var scaleTrans = group.Children[0] as ScaleTransform;

scaleTrans.ScaleX = 1;

scaleTrans.ScaleY = 1;

}

private void originImg() {

var group = IMG.FindResource("Imageview") as TransformGroup;

//初始化位置

var translateTrans = group.Children[1] as TranslateTransform;

translateTrans.X = 0;

translateTrans.Y = 0;

//初始化缩放比例

var scaleTrans = group.Children[0] as ScaleTransform;

scaleTrans.ScaleX = 1;

scaleTrans.ScaleY = 1;

}

private void IMG1_MouseMove(object sender, MouseEventArgs e)

{

var img = sender as ContentControl;

if (img == null)

{

return;

}

if (mouseDown)

{

Domousemove(img, e);

}

}

private void IMG1_MouseWheel(object sender, MouseWheelEventArgs e)

{

var img = sender as ContentControl;

if (img == null)

return;

var point = e.GetPosition(img);

var group = IMG.FindResource("Imageview") as TransformGroup;

var delta = e.Delta * 0.001;

DowheelZoom(group, point, delta);

}

private void IMG1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

var img = sender as ContentControl;

if (img == null)

return;

img.CaptureMouse();

mouseDown = true;

mouseXY = e.GetPosition(img);

}

private void IMG1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)

{

var img = sender as ContentControl;

if (img == null)

return;

img.ReleaseMouseCapture();

mouseDown = false;

}

private void DowheelZoom(TransformGroup group, Point point, double delta)

{

var pointToContent = group.Inverse.Transform(point);

var transform = group.Children[0] as ScaleTransform;

if (transform.ScaleX + delta < 0.1) return;

transform.ScaleX += delta;

transform.ScaleY += delta;

var transform1 = group.Children[1] as TranslateTransform;

transform1.X = -1 * ((pointToContent.X * transform.ScaleX) - point.X);

transform1.Y = -1 * ((pointToContent.Y * transform.ScaleY) - point.Y);

}

private void Domousemove(ContentControl img, MouseEventArgs e)

{

if (e.LeftButton != MouseButtonState.Pressed)

{

return;

}

var group = IMG.FindResource("Imageview") as TransformGroup;

var transform = group.Children[1] as TranslateTransform;

var position = e.GetPosition(img);

transform.X -= mouseXY.X - position.X;

transform.Y -= mouseXY.Y - position.Y;

mouseXY = position;

}

private void buttonClose_Click(object sender, MouseButtonEventArgs e)

{

IMG.Visibility = Visibility.Collapsed;

wform.Visibility = Visibility.Visible;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: