1. 程式人生 > >c# WPF 中圖片縮放功能,滑鼠拖動位置

c# WPF 中圖片縮放功能,滑鼠拖動位置

<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;
        }
         
    }
}

相關推薦

c# WPF 圖片功能滑鼠位置

<Window x:Class="LJDX.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://sc

android 圖片後劃屏圖片與Viewpager切換Item衝突(圖片的事件相應被遮蔽)問題解決

/** * 設定拖拽狀態下的Matrix * @param event */ public void setDragMatrix(MotionEvent event) { if(isZoomChanged

Python圖片實現以及多種尺寸icon的生成

在pillow中圖片的縮放有兩種方式,1.使用resize函式,2,使用thumbnail函式 resize函式可以縮小,也可以放大 thumbnail只能縮小,不能放大 所以,如果你只打開一次圖片,要存出多個尺寸的話,要麼,從大到小開始縮放。 要麼,使用resize.建議

Android Matrix處理ImageView圖片平移

1,Matrix 原理簡單介紹       Matrix :矩陣,線性代數裡有介紹,結合Matrix,用於平面的縮放、平移、旋轉等操作。 首先介紹一下矩陣運算。加法和減法就不用說了,太簡單了,對應位相加就好。影象處理,主要用到的是乘法 。下面是一個乘法的公式: 在 And

java圖片使用ImageIO代替JPEGImageEncoder

專案中 需要對使用者上傳的圖片進行壓縮或者放大處理 在網上找的例項中都是使用的JPEGImageEncoder ( com.sun.image.codec.jpeg.JPEGImageEncoder )類進行的。但是從jdk7 開始 這個類已經被移除了。雖能網友也提供了

Android Bitmap圖片優化用canvas替代Matrix進行解決一些錯我

前面用Matrix來縮放Bitmap,發現有些情況下會丟擲錯誤,導致圖片空白。 /** * 縮放 * * @param bm * @param newWidth * @param newHeight *

圖片居中按比例顯示、鼠標滾動、鼠標平移

cal mar abs head max his return mouseup 兼容模式 1.為了居中顯示,考慮到div不好設置,用table做邊框 縮放原理:調整圖片寬高、定位left、top; 平移:鼠標事件位置、定位left、top。 目前貼出實現代碼,具體研究內容再

關於UnityUGUI圖片Image實現仿視頻播放窗口的四角功能

重置 assert clas () strong unity 操作 寬度 腳本 應用方法:將下面腳本掛載在需要實現四角縮放功能的UI圖片上即可. 自定義拖拽精度(與邊界距離多少內觸發)m_validityWidth. 1 /********************

Android程式碼動態設定圖片的大小(自動位置

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr

圖片點擊放大再次點擊回到原來狀態(圖片

點擊事件 nbsp 尺寸 狀態 調用 ges cnblogs view tps 1.生成一個類,繼承自UIView(ScalePictures),在這個類的.h中聲明一個類方法: +(void)scanBigImageView:(UIImageView *)currentI

php圖片上傳類(支持、裁剪、圖片功能

php圖片上傳類(支持縮放、裁剪、圖片縮代碼: /** * @author [Lee] <[<[email protected]>]> * 1、自動驗證文件是表單提交的文件還是base64流提交的文件 * 2、驗證圖片類型是否合法 * 3、驗證圖片尺寸是否合法 * 4、驗證圖片大小是否合法

AE開發之默認滾輪功能反置(C#修改註冊表數據)

arcgis closed wheel engine user 直接 clas for sem ArcMap默認的滾輪縮放是向下放大,向上縮小 如果想修改成向上放大,向下縮小,直接在ArcMap-Customize-ArcMap Options裏, 將最下面的Mouse W

js實現移動端圖片預覽:手勢 手勢雙擊放大...

在屏幕上 turn cit format 基礎上 set 邊距 點擊 點擊事件 前言本文將介紹如何通過js實現移動端圖片預覽,包括圖片的 預覽模式,手勢縮放,手勢拖動,雙擊放大等基本功能;

如何使用CAD編輯器的框選功能

如何使用CAD編輯器中的框選縮放功能?現在隨著人們生活水平的不斷提高,越來越多的人們開始對住房有了更多的要求,所有隨著CAD行業的發展,也有越來越多的小夥伴們開始加入到CAD這個行業中來,日常的工作就是編輯出各種CAD圖紙,但是在編輯CAD圖紙的時候,也會遇到許許多多的問題,那就是如何使用CAD編輯器中的框選

Angular圖片指令(手機端手動放大縮小)

Angular手機端圖片放大縮小 首先在controller中寫一個指令,Angular中使用.directive宣告一個指令 var demoForDirective = angular.module('demoForDirective', ['demoFor

Thumbnailator圖片處理(圖片區域裁剪水印旋轉保持比例)

Thumbnailator 是一個優秀的圖片處理的Google開源Java類庫。處理效果遠比Java API的好。從API提供現有的影象檔案和影象物件的類中簡化了處理過程,兩三行程式碼就能夠從現有圖片生

PHP例項————圖片等比例功能

在網站開發的過程中,經常要對一些圖片進行一些處理,比如說縮放,裁剪,加水印等等。當然這些功能不僅僅可以用在開發網站的過程中,平時需要對圖片做一些處理的時候,把這個功能封裝到函式中去,要處理圖片的時候,

使用awt的類操作圖片、變圓透明、水印、合併

本文是因為以前寫過的一個公眾號,需要做這些操作,現在總結一下。當時對awt只限於瞭解,用到的時候看了看文件和別人的程式碼,做了幾次測試後寫的一個整合工具。 本文會依據先後順序介紹使用awt的工具類對圖片進行縮放、變圓透明、合併、水印,雖然每個都是分步的,但

ASP.NET怎樣實現圖片驗證碼功能並且點選圖片會重新整理

------ 基本思路: 圖片的src=後臺的一個函式,此函式返回按照一定規則生成的圖片檔案流。 然後此圖片即可生成。 那麼怎樣重新整理驗證碼呢,這是個問題。 因為給圖片的src賦了值之後,想要更換一個圖片,那麼src的那個函式必須再執行一次才行。 <img src=

viewPager+photoView實現圖片輪播和手勢功能 支援手勢的imageView 如何實現相簿左右滑動和手勢 如何讓圖片自適應控制元件大小 photoView如何使用(上)

import uk.co.senab.photoview.IPhotoView; import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedList