最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Winform編寫一個圖片預覽器管理

 更新時間:2024年02月03日 08:37:19   作者:搬磚的詩人Z  
這篇文章主要為大家詳細介紹了C#如何使用Winform編寫一個通用圖片預覽器管理,包含滾輪放大縮小,剪切,下一頁,方向變化等,需要的可以參考下

效果圖

實現(xiàn)代碼

using MetroFramework.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using XinShiYun_ScanReader.Common;
using XinShiYun_ScanReader.Model;

namespace XinShiYun_ScanReader
{
    public partial class ImageForm : MetroForm
    {
        /// <summary>
        /// 當前圖片
        /// </summary>
        Image myImage;

        /// <summary>
        /// 圖片集合,用于翻頁瀏覽
        /// </summary>
        //public static List<Bitmap> myImages = new List<Bitmap>();

        List<ImageStateModel> ImageStateModels;

        /// <summary>
        /// 當前瀏覽的項
        /// </summary>
        int myIndex;

        /// <summary>
        /// 變更的圖片
        /// </summary>
        public static List<int> ChangeImageIndexs = new List<int>();

        /// <summary>
        /// 剪切距離左邊 默認左右剪切5px
        /// </summary>
        public int _cutLeft = 5;
        /// <summary>
        /// 剪切距離右邊 默認左右剪切5px
        /// </summary>
        public int _cutRight = 5;
        /// <summary>
        /// 剪切距離上邊
        /// </summary>
        public int _cutTop = 0;
        /// <summary>
        /// 剪切距離下邊
        /// </summary>
        public int _cutBottom = 0;

        /// <summary>
        /// 緩存上次裁剪圖片的地址
        /// </summary>
        public string BaseCutPath = Environment.CurrentDirectory + "\\CutPic\\";

        /// <summary>
        /// 緩存上次裁剪的圖片名稱
        /// </summary>
        public List<string> CutPathList = null;

        public ImageForm(List<ImageStateModel> imageStateModels, int index)
        {
            InitializeComponent();

            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
            this.UpdateStyles();

            CreateCutPic();

            ImageStateModels = imageStateModels;
            string path = ImageStateModels[index].tempPicUrl;
            Image img = Image.FromFile(path);
            myImage = img;

            myIndex = index;
            this.MouseWheel += new MouseEventHandler(CandidateForm_MouseWheel);

            Init();
            ChangeImageIndexs = new List<int>();
        }

        /// <summary>
        /// 剪切圖片存儲
        /// </summary>
        private void CreateCutPic()
        {
            try
            {
                if (!Directory.Exists(BaseCutPath))
                {
                    Directory.CreateDirectory(BaseCutPath);
                }
                CutPathList = new List<string>();
                DirectoryInfo dir = new DirectoryInfo(BaseCutPath);
                FileSystemInfo[] fileinfo = dir.GetFiles();
                if (fileinfo == null)
                    return;
                foreach (FileSystemInfo i in fileinfo)
                {
                    File.Delete(i.FullName);      //刪除指定文件
                }
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法-ImageForm-CreateCutPic");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }

        /// <summary>
        /// 添加剪切文件
        /// </summary>
        private void AddCutPic(Image img)
        {
            try
            {
                string name = Guid.NewGuid().ToString("N") +".jpg";
                string path = BaseCutPath + name;
                CutPathList.Add(path);
                img.Save(path);
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法-ImageForm-AddCutPic");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }
        }

        /// <summary>
        /// 恢復上一步圖片
        /// </summary>
        private void RevCutPic(string savePath)
        {
            if (CutPathList == null)
                return;
            int lastIndex = CutPathList.Count();//最后一步
            if (lastIndex <= 0)
                return;

            try
            {
                string path = CutPathList[lastIndex - 1];
                Image img = Image.FromFile(path);
                pic_Image.Image = img;
                myImage = img;
                img.Save(savePath, ImageFormat.Jpeg);
                CutPathList.RemoveAt(lastIndex - 1);
                pic_Image.Refresh();
                GC.Collect();
              
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法-ImageForm-RevCutPic");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }



        }

        /// <summary>
        /// 初始化
        /// </summary>
        private void Init()
        {
            try
            {
                string cutValue = ConfigHelper.ReadConfigPath("cut.txt");
                string[] destWidth = cutValue.Split(',');
                foreach (var item in destWidth)
                {
                    if (!string.IsNullOrEmpty(item))
                    {
                        string[] width = item.Split(':');
                        if (width[0] == "L")
                        {
                            _cutLeft = Convert.ToInt32(width[1]);
                        }
                        if (width[0] == "R")
                        {
                            _cutRight = Convert.ToInt32(width[1]);
                        }
                        if (width[0] == "T")
                        {
                            _cutTop = Convert.ToInt32(width[1]);
                        }
                        if (width[0] == "B")
                        {
                            _cutBottom = Convert.ToInt32(width[1]);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法-ImageForm-Init");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }
        }

        private void ImageForm_Load(object sender, EventArgs e)
        {
            try
            {
                this.Width = 1000;
                this.Height = 1000;
                this.pic_Image.Dock = DockStyle.None;
                this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
                this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                pic_Image.Image = myImage;

                //pic_left.Location = new Point(this.Width / 2 - pic_left.Width, pic_left.Location.Y);
                //pic_right.Location = new Point(this.Width / 2 + pic_right.Width, pic_right.Location.Y);
                //pic_cut.Location = new Point(this.Width / 2 + pic_right.Width + pic_cut.Width + 10, pic_cut.Location.Y);
                panel_bottom.Location = new Point(this.Width / 2 - panel_bottom.Width / 2, panel_bottom.Location.Y);

                pic_goleft.Location = new Point(pic_goleft.Location.X, this.Height / 2);
                pic_goright.Location = new Point(pic_goright.Location.X, this.Height / 2);
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--ImageForm_Load");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }


        /// <summary>
        /// 鼠標滾動
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CandidateForm_MouseWheel(object sender, MouseEventArgs e)
        {
            try
            {
                this.pic_Image.Dock = DockStyle.None;
                this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
                this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                Size size = this.pic_Image.Size;
                size.Width += e.Delta;
                if (size.Width > pic_Image.Image.Width)
                {
                    pic_Image.Width = pic_Image.Image.Width;
                    pic_Image.Height = pic_Image.Image.Height;
                }
                //else if (size.Width * pic_Image.Image.Height / pic_Image.Image.Width < pic_Image.Parent.Height - 200)
                //{
                //    return;
                //}
                else
                {
                    pic_Image.Width = size.Width;
                    pic_Image.Height = size.Width * pic_Image.Image.Height / pic_Image.Image.Width;
                }
                pic_Image.Left = (pic_Image.Parent.Width - pic_Image.Width) / 2;
                pic_Image.Top = (pic_Image.Parent.Height - pic_Image.Height) / 2;
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--CandidateForm_MouseWheel");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }
        }


        private void panel_Image_Paint(object sender, PaintEventArgs e)
        {
        }

        private void metroButton1_Click(object sender, EventArgs e)
        {

        }

        private void metroButton2_Click(object sender, EventArgs e)
        {

        }

        bool canDrag = false;
        int pic_w = 0;
        int pic_h = 0;

        private void pic_Image_MouseDown(object sender, MouseEventArgs e)
        {
            pic_w = e.Location.X;
            pic_h = e.Location.Y;
            canDrag = true;
        }

        private void pic_Image_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                if (canDrag)
                {
                    pic_Image.Location = new Point(pic_Image.Left + e.X - pic_w, pic_Image.Top + e.Y - pic_h);
                }
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_Image_MouseMove");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }

        private void pic_Image_MouseUp(object sender, MouseEventArgs e)
        {
            canDrag = false;
        }

        private void pic_left_Click(object sender, EventArgs e)
        {
            try
            {
                Bitmap bitmap = (Bitmap)myImage;
                bitmap.RotateFlip(RotateFlipType.Rotate90FlipXY);

                if (!ChangeImageIndexs.Contains(myIndex))
                {
                    ChangeImageIndexs.Add(myIndex);
                }
                myImage = bitmap;
                this.pic_Image.Image = bitmap;
                pic_Image.Refresh();

                string path = ImageStateModels[myIndex].tempPicUrl;
                pic_Image.Image.Save(path, ImageFormat.Jpeg);
                GC.Collect();
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_left_Click");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }
        }

        private void pic_right_Click(object sender, EventArgs e)
        {
            try
            {
                Bitmap bitmap = (Bitmap)myImage;
                bitmap.RotateFlip(RotateFlipType.Rotate270FlipXY);

                if (!ChangeImageIndexs.Contains(myIndex))
                {
                    ChangeImageIndexs.Add(myIndex);
                }
                myImage = bitmap;
                this.pic_Image.Image = myImage;
                pic_Image.Refresh();

                string path = ImageStateModels[myIndex].tempPicUrl;
                pic_Image.Image.Save(path, ImageFormat.Jpeg);
                GC.Collect();
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_right_Click");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }

        private void ImageForm_SizeChanged(object sender, EventArgs e)
        {
            try
            {
                panel_bottom.Location = new Point(this.Width / 2 - panel_bottom.Width / 2, this.Height - panel_bottom.Height - 20);

                pic_goleft.Location = new Point(pic_goleft.Location.X, this.Height / 2);
                pic_goright.Location = new Point(pic_goright.Location.X, this.Height / 2);

            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--ImageForm_SizeChanged");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }
        }

        private void pic_goleft_Click(object sender, EventArgs e)
        {
            try
            {
                if (myIndex <= 0)
                    return;
                myIndex--;

                this.pic_Image.Dock = DockStyle.None;
                this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
                this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

                string path = ImageStateModels[myIndex].tempPicUrl;
                myImage = Image.FromFile(path);
                pic_Image.Image = myImage;
                GC.Collect();
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_goleft_Click");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }

        private void pic_goright_Click(object sender, EventArgs e)
        {
            try
            {
                if (myIndex >= ImageStateModels.Count() - 1)
                    return;
                myIndex++;

                this.pic_Image.Dock = DockStyle.None;
                this.pic_Image.SizeMode = PictureBoxSizeMode.Zoom;
                this.pic_Image.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

                string path = ImageStateModels[myIndex].tempPicUrl;
                myImage = Image.FromFile(path);
                //myImage = img;
                pic_Image.Image = myImage;
                GC.Collect();

            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_goright_Click");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }

        /// <summary>
        /// 剪切圖標2邊,每次剪切5px 讀取配置文件cut.txt 格式 L:50,R:50,T:0,B:0
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pic_cut_Click(object sender, EventArgs e)
        {
            try
            {
                if (myImage.Width <= _cutLeft + _cutRight)
                    return;
                if (myImage.Height <= _cutTop + _cutBottom)
                    return;

                AddCutPic(myImage);

                Bitmap img = ImageHelper.ImageCut(new Bitmap(myImage), _cutLeft, _cutTop, myImage.Width - _cutLeft - _cutRight, myImage.Height - _cutTop - _cutBottom);


                pic_Image.Image = img;
                pic_Image.Refresh();

                if (!ChangeImageIndexs.Contains(myIndex))
                {
                    ChangeImageIndexs.Add(myIndex);
                }
                myImage.Dispose();

                string path = ImageStateModels[myIndex].tempPicUrl;
                pic_Image.Image.Save(path, ImageFormat.Jpeg);

                myImage = img;
                GC.Collect();
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_cut_Click");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }

        }

        private void pic_CutSelf_Click(object sender, EventArgs e)
        {
            try
            {
                CutSize cutSize = new CutSize();
                cutSize.ShowDialog();

                if (myImage.Width <= CutSize.Cut_Left + CutSize.Cut_Right)
                    return;
                if (myImage.Height <= CutSize.Cut_Top + CutSize.Cut_Bottom)
                    return;

                Bitmap img = ImageHelper.ImageCut(new Bitmap(myImage), CutSize.Cut_Left, CutSize.Cut_Top, myImage.Width - CutSize.Cut_Left - CutSize.Cut_Right, myImage.Height - CutSize.Cut_Top - CutSize.Cut_Bottom);

                pic_Image.Image = img;
                pic_Image.Refresh();

                if (!ChangeImageIndexs.Contains(myIndex))
                {
                    ChangeImageIndexs.Add(myIndex);
                }
                myImage.Dispose();

                string path = ImageStateModels[myIndex].tempPicUrl;
                pic_Image.Image.Save(path, ImageFormat.Jpeg);

                myImage = img;
                GC.Collect();
            }
            catch (Exception ex)
            {
                log4netHelper.Error("---報錯方法--pic_cut_Click");
                log4netHelper.Error(ex.Message);
                log4netHelper.Error(ex.StackTrace);
                log4netHelper.Error("---end---");
            }
        }

        private void pic_cut_MouseHover(object sender, EventArgs e)
        {
            toolTip.SetToolTip(pic_cut, "自動裁剪圖片");
        }

        private void pic_left_MouseHover(object sender, EventArgs e)
        {
            toolTip.SetToolTip(pic_left, "圖片左旋轉90度");
        }

        private void pic_right_MouseHover(object sender, EventArgs e)
        {
            toolTip.SetToolTip(pic_right, "圖片右旋轉90度");
        }

        private void pic_CutSelf_MouseHover(object sender, EventArgs e)
        {
            toolTip.SetToolTip(pic_CutSelf, "自定義裁剪圖片");
        }

        private void ImageForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Dispose();
        }

        private void pic_return_MouseHover(object sender, EventArgs e)
        {
            toolTip.SetToolTip(pic_CutSelf, "返回裁剪上一步");
        }

        private void pic_return_Click(object sender, EventArgs e)
        {
            RevCutPic(ImageStateModels[myIndex].tempPicUrl);
        }
    }
}

到此這篇關于C#使用Winform編寫一個圖片預覽器管理的文章就介紹到這了,更多相關C# Winform圖片預覽器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C# 判斷文件路徑的后綴

    C# 判斷文件路徑的后綴

    本文主要介紹了C# 判斷文件路徑的后綴,,通過解析文件名并檢查其擴展名來判斷文件的后綴是否為.dcm,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • C#游戲開發(fā)之實現(xiàn)俄羅斯方塊游戲

    C#游戲開發(fā)之實現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細介紹了C#如何實現(xiàn)經典俄羅斯方塊游戲,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C#實現(xiàn)winform窗口抖動效果的示例代碼

    C#實現(xiàn)winform窗口抖動效果的示例代碼

    在WinForms應用程序中,實現(xiàn)窗口抖動效果可以為用戶界面增添一些趣味性和互動性,想象一下,當你點擊一個按鈕時,窗口會輕微地“顫抖”幾下,就像它在對你表示不滿或提醒你注意某些事情,這個效果可以通過定時改變窗口的位置來實現(xiàn),需要的朋友可以參考下
    2024-12-12
  • C#實現(xiàn)將Excel工作表拆分為多個窗格

    C#實現(xiàn)將Excel工作表拆分為多個窗格

    在日常工作中,我們經常需要處理包含大量數(shù)據的 Excel 文件,本文將深入探討如何在 C# 中利用強大的 Spire.XLS for .NET 自動化實現(xiàn) Excel 工作表的窗格拆分功能,感興趣的小伙伴可以了解下
    2025-12-12
  • C#中using語句的用法

    C#中using語句的用法

    這篇文章介紹了C#中using語句的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 詳解C#泛型的類型參數(shù)約束

    詳解C#泛型的類型參數(shù)約束

    這篇文章主要介紹了C#泛型的類型參數(shù)約束的相關資料,文中講解非常細致,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-07-07
  • C#如何通過匿名類直接使用訪問JSON數(shù)據詳解

    C#如何通過匿名類直接使用訪問JSON數(shù)據詳解

    這篇文章主要給大家介紹了關于C#如何通過匿名類直接使用訪問JSON數(shù)據的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧。
    2018-02-02
  • c# 9.0新特性——模塊初始化器

    c# 9.0新特性——模塊初始化器

    這篇文章主要介紹了c# 9.0新特性——模塊初始化器的相關資料,幫助大家更好的理解和學習c#9.0,感興趣的朋友可以了解下
    2020-11-11
  • C#對稱加密與非對稱加密實例

    C#對稱加密與非對稱加密實例

    這篇文章主要介紹了C#對稱加密與非對稱加密實例,詳細分析了對稱加密與非對稱加密的原理與具體實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • C# 屏蔽由于崩潰彈出的windows異常彈框

    C# 屏蔽由于崩潰彈出的windows異常彈框

    這篇文章主要介紹了C# 屏蔽由于崩潰彈出的windows異常彈框,需要的朋友可以參考下
    2017-08-08

最新評論

东乌珠穆沁旗| 历史| 马公市| 高密市| 宁安市| 纳雍县| 吕梁市| 安庆市| 德保县| 米泉市| 古蔺县| 罗城| 吴桥县| 阿克| 巨野县| 昌图县| 彝良县| 应城市| 西藏| 平利县| 久治县| 肥乡县| 化隆| 旅游| 开阳县| 阿拉善左旗| 常山县| 象山县| 霍州市| 含山县| 教育| 翁牛特旗| 阳朔县| 会东县| 中卫市| 阿鲁科尔沁旗| 蒲江县| 深泽县| 东宁县| 兰溪市| 桐乡市|