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

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

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

一、引言

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

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

二、實現(xiàn)思路

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

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

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

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

**// 第一步** // 獲得預(yù)覽圖片文件路徑下的圖片集合
 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異常
 // 經(jīng)常在調(diào)用Save方法的時候都會出現(xiàn) 一個GDI一般性錯誤,主要原因是文件沒有被釋放,當(dāng)保存到原位置時,就會出現(xiàn)該異常,要避免這個錯誤就要釋放圖片占有的資源
 newbitmap.Dispose();
 if (index != imgArray.Count - 1)
 {
 SwitchImg(index + 1);
 }
 else
 {
 SwitchImg(0);
 }
 }

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

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

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

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

 // 順時針旋轉(zhuǎn)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;
 }

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

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

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

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

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

 // 保存旋轉(zhuǎn)后的圖片
 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)效果

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

四、小結(jié)

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

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

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

相關(guān)文章

最新評論

大同县| 松滋市| 林甸县| 宁津县| 潼南县| 犍为县| 星子县| 湘阴县| 宜春市| 咸宁市| 缙云县| 安康市| 石门县| 林甸县| 油尖旺区| 祁阳县| 于田县| 石城县| 芦溪县| 罗山县| 白玉县| 诏安县| 内江市| 保靖县| 蛟河市| 灵石县| 巴林右旗| 定安县| 南召县| 芦溪县| 平度市| 元江| 庆阳市| 蒲江县| 青冈县| 太康县| 潜江市| 深泽县| 佛冈县| 修文县| 西平县|