欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c# 實現(xiàn)圖片查看器

 更新時間:2020年07月24日 16:46:37   作者:Learning hard  
這篇文章主要介紹了c# 如何實現(xiàn)圖片查看器,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

一、引言

因為最近在MSDN中的論壇和CSDN論壇都看到有些朋友問到如何用C#實現(xiàn)一個像Windows自帶的圖片查看器的功能等類似的問題(當然還有如何如何旋轉圖片的,如何通過按鈕來變換圖片的功能等),所以為了幫助大家更好地解決類似的這樣的問題,所以這篇文章將簡單介紹下如何使用C#來實現(xiàn)一個圖片查看器的功能的,該工具保存的功能有:

  1. 可以通過“上一張” “下一張”這樣的按鈕來輪換瀏覽圖片
  2. 實現(xiàn)對圖片的旋轉
  3. 實現(xiàn)對旋轉后圖片的保存功能。本程序不僅提供旋轉90/180/270這樣的實現(xiàn),同時提供一個方法來完成旋轉任意角度的實現(xiàn)
  4. 該程序未實現(xiàn)Windows圖片查看圖片縮放的功能,這部分的功能主要要點是改變圖片在PictureBox控件中的高度和寬度就可以的

二、實現(xiàn)思路

2.1 圖片輪換瀏覽功能的實現(xiàn)

首先分析下第一個功能點的實現(xiàn),要實現(xiàn)圖片的輪換瀏覽,我們可以根據下面的思路來實現(xiàn):

  • 第一步、獲得目錄下所有圖片的集合,此時使用**Directory.GetFiles()**來獲得目錄下所有文件,然后再對該集合進行篩選,篩選出是圖片的文件,代碼用擴展名進行篩選的
  • 第二步、獲得所有圖片集合之后,實現(xiàn)圖片輪換就需要改變這個集合的索引就可以實現(xiàn)上一張和下一張的功能了
  • 第三步、需要考慮到最后一張或者第一張的情況下,再點擊下一張或上一張圖片來輪換成第一張或最后一張

思路就是上面的,有了上面的思路之后,就讓我們看看具體的代碼來對照理解下:

**// 第一步** // 獲得預覽圖片文件路徑下的圖片集合
 public static List<string> GetImgCollection(string path)
 {
 string[] imgarray = Directory.GetFiles(path);
 var result = from imgstring in imgarray
 where imgstring.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) || 
 imgstring.EndsWith("png", StringComparison.OrdinalIgnoreCase)||
 imgstring.EndsWith("bmp", StringComparison.OrdinalIgnoreCase)
 select imgstring;
 return result.ToList();
 }

 **// 第二步** // 獲得打開圖片在圖片集合中的索引
 private int GetIndex(string imagepath)
 {
 int index = 0; 
 for (int i = 0; i < imgArray.Count; i++)
 {
 if (imgArray[i].Equals(imagepath))
 {
 index = i;
 break;
 }
 }

 return index;
 }

 // 切換圖片的方法
 private void SwitchImg(int index)
 {
 newbitmap = Image.FromFile(imgArray[index]);
 picBoxView.Image = newbitmap;
 imgPath = imgArray[index];
 } 

 **// 第三步** // 上一張圖片
 private void btnPre_Click(object sender, EventArgs e)
 {
 int index = GetIndex(imgPath);
 // 釋放上一張圖片的資源,避免保存的時候出現(xiàn)ExternalException異常
 newbitmap.Dispose();
 if (index == 0)
 {
 SwitchImg(imgArray.Count - 1);
 }
 else
 {
 SwitchImg(index - 1);
 }
 }

 // 下一張圖片
 private void btnNext_Click(object sender, EventArgs e)
 {
 int index = GetIndex(imgPath);
 // 釋放上一張圖片的資源,避免保存的時候出現(xiàn)ExternalException異常
 // 經常在調用Save方法的時候都會出現(xiàn) 一個GDI一般性錯誤,主要原因是文件沒有被釋放,當保存到原位置時,就會出現(xiàn)該異常,要避免這個錯誤就要釋放圖片占有的資源
 newbitmap.Dispose();
 if (index != imgArray.Count - 1)
 {
 SwitchImg(index + 1);
 }
 else
 {
 SwitchImg(0);
 }
 }

2.2 圖片旋轉功能的實現(xiàn)

上面的代碼實現(xiàn)了第一個功能點的問題了,下面就解釋下如何實現(xiàn)第二個功能點——圖片旋轉的問題:

對于Windows自帶的圖片查看器,它旋轉的角度只能順時針旋轉90或逆時針旋轉90度,這個功能實現(xiàn)起來可以說非常簡單,只需要使用**Image.RotateFlip(RotateFlipType)**方法就可以完成的,有些朋友也想對圖片實現(xiàn)旋轉任意角度,對于這個問題源碼中也有具體的實現(xiàn),大家可以從文章的最后下載源碼進行查看,這里就不貼出具體代碼的,下面就看看如何實現(xiàn)Windows自帶的圖片查看器的旋轉功能的代碼:

 // 順時針旋轉90度旋轉圖片
 private void btnRotate_Click(object sender, EventArgs e)
 {
 picBoxView.SizeMode = PictureBoxSizeMode.Zoom;

 // 順時針旋轉90度的另外一種實現(xiàn)
 newbitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);
 picBoxView.Image = newbitmap;
 isRotate = true;
 //newbitmap = (Image)ImageManager.RotateImg(bitmap, 90f, Color.Transparent); ;
 //bitmap.Dispose();
 //picBoxView.Image = newbitmap;
 }

 // 逆時針旋轉90度
 private void btncounterclockwiseRotate_Click(object sender, EventArgs e)
 {
 picBoxView.SizeMode = PictureBoxSizeMode.Zoom;

 // 逆時針旋轉90度的另外實現(xiàn)
 newbitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);
 picBoxView.Image = newbitmap;
 isRotate = true;
 // 下面是旋轉任意角度的代碼
 //newbitmap = (Image)ImageManager.RotateImg(bitmap, 360f-90f, Color.Transparent); ;
 //bitmap.Dispose();
 //picBoxView.Image = newbitmap;
 }

2.3 對旋轉圖片的保存功能的實現(xiàn)

最后就是針對旋轉圖片保存的實現(xiàn)了,此時我參考了Windows自帶圖片查看器的實現(xiàn)方式,因為我用Windows自帶圖片查看器瀏覽圖片的實現(xiàn),當我旋轉圖片時,它并不是實時地保存到旋轉的圖片的,而是當我關閉Windows自帶圖片查看器的時候,旋轉的圖片才保存到文件中的,有了這個思路之后,我就把我保存的代碼邏輯放在窗體的關閉的事件處理程序中來實現(xiàn)的,此時保存的功能我們只需要調用**Image.Save(path)**方法就可以完成對圖片的保存,下面就看看具體代碼的實現(xiàn)的:

 // 關閉窗體后保存旋轉后的圖片到文件中
 private void Form1_FormClosed(object sender, FormClosedEventArgs e)
 {
 if (imgPath == null || isRotate == false)
 {
 return;
 }

 // 保存旋轉后的圖片
 switch (Path.GetExtension(imgPath).ToLower())
 {
 case ".png":
 newbitmap.Save(imgPath, ImageFormat.Png);
 newbitmap.Dispose();
 break;
 case ".jpg":
 newbitmap.Save(imgPath);
 newbitmap.Dispose();
 break;
 default:
 newbitmap.Save(imgPath, ImageFormat.Bmp);
 newbitmap.Dispose();
 break;
 }
 }

三、實現(xiàn)效果

上面已經介紹了實現(xiàn)該程序的一個思路的,朋友是不是迫不及待的想看到到底自定義圖片查看器是什么樣子的呢?下面就通過一個動畫來讓大家更形象地看到程序的運行效果的:

四、小結

到這里該文章的內容就介紹結束了,希望大家如果遇到類似的問題可以很快從這篇博客中得到解決,另外附帶下MSDN中這個問題的鏈接:

http://social.msdn.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/89d09d59-ab82-4e41-896f-daab68edbd10

以上就是c# 實現(xiàn)圖片查看器的詳細內容,更多關于c# 圖片查看器的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解C#讀取Appconfig中自定義的節(jié)點

    詳解C#讀取Appconfig中自定義的節(jié)點

    我們往往需要在App.config中自定義一些節(jié)來滿足實際需要,而不依賴于App.config的appSettings,下面通過一個簡單的實例來說明自定義配置節(jié)點的設置與讀取
    2015-06-06
  • C#線程隊列用法實例分析

    C#線程隊列用法實例分析

    這篇文章主要介紹了C#線程隊列用法,以實例形式分析了C#線程隊列的創(chuàng)建、運行、等待、結束等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • c#常用表格控件dataGridView的分頁顯示

    c#常用表格控件dataGridView的分頁顯示

    最近項目需要自己寫了一個用來給DataGridView分頁用的控件,下面這篇文章主要給大家介紹了關于c#常用表格控件dataGridView的分頁顯示,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Winform開發(fā)框架中如何使用DevExpress的內置圖標資源

    Winform開發(fā)框架中如何使用DevExpress的內置圖標資源

    這篇文章主要給大家介紹了關于在Winform開發(fā)框架中如何使用DevExpress的內置圖標資源的相關資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們一起來看看吧
    2018-12-12
  • C# CultureInfo之常用InvariantCulture案例詳解

    C# CultureInfo之常用InvariantCulture案例詳解

    這篇文章主要介紹了C# CultureInfo之常用InvariantCulture案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C#環(huán)形隊列的實現(xiàn)方法詳解

    C#環(huán)形隊列的實現(xiàn)方法詳解

    這篇文章先是簡單的給大家介紹了什么是環(huán)形隊列和環(huán)形隊列的優(yōu)點,然后通過實例代碼給大家介紹C#如何實現(xiàn)環(huán)形隊列,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • C#實現(xiàn)獲取機器碼的示例詳解

    C#實現(xiàn)獲取機器碼的示例詳解

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)獲取機器碼的功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Unity3D實現(xiàn)打磚塊游戲

    Unity3D實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C#中正則表達式(Regex)過濾內容的基本使用方法

    C#中正則表達式(Regex)過濾內容的基本使用方法

    在 Regex 類中提供了很多方法來操作正則表達式,這篇文章主要給大家介紹了關于C#中正則表達式(Regex)過濾內容的基本使用方法,需要的朋友可以參考下
    2022-08-08
  • C#簡單讀取主機上所有進程的方法

    C#簡單讀取主機上所有進程的方法

    這篇文章主要介紹了C#簡單讀取主機上所有進程的方法,涉及C#進程的遍歷讀取操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08

最新評論