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

来源:互联网 发布:python开源什么意思 编辑:程序博客网 时间:2024/04/24 19:30
<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;
        }
         
    }
}


0 0
原创粉丝点击