`

[C# 开发技巧系列]C#如何实现图片查看器

阅读更多
原帖地址:http://www.cnblogs.com/zhili/archive/2013/06/02/PictureView.html

本专题概要



  • 一、引言

  • 二、实现思路

  • 三、实现效果

  • 四、小结


一、引言


因为最近在MSDN中的论坛和CSDN论坛都看到有些朋友问到如何用C#实现一个像Windows自带的图片查看器的功能等类似的问题(当然还有如何如何旋转图片的,如何通过按钮来变换图片的功能等),所以为了帮助大家更好地解决类似的这样的问题,所以这篇文章将简单介绍下如何使用C#来实现一个图片查看器的功能的,该工具保存的功能有:



  1.  可以通过“上一张” “下一张”这样的按钮来轮换浏览图片

  2.  实现对图片的旋转

  3.  实现对旋转后图片的保存功能。本程序不仅提供旋转90/180/270这样的实现,同时提供一个方法来完成旋转任意角度的实现

  4. 该程序未实现Windows图片查看图片缩放的功能,这部分的功能主要要点是改变图片在PictureBox控件中的高度和宽度就可以的


二、实现思路


2.1 图片轮换浏览功能的实现


首先分析下第一个功能点的实现,要实现图片的轮换浏览,我们可以根据下面的思路来实现:



  • 第一步、获得目录下所有图片的集合,此时使用Directory.GetFiles()来获得目录下所有文件,然后再对该集合进行筛选,筛选出是图片的文件,代码用扩展名进行筛选的

  • 第二步、获得所有图片集合之后,实现图片轮换就需要改变这个集合的索引就可以实现上一张和下一张的功能了

  • 第三步、需要考虑到最后一张或者第一张的情况下,再点击下一张或上一张图片来轮换成第一张或最后一张


思路就是上面的,有了上面的思路之后,就让我们看看具体的代码来对照理解下:



// 第一步
// 获得预览图片文件路径下的图片集合
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);
// 释放上一张图片的资源,避免保存的时候出现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);
// 释放上一张图片的资源,避免保存的时候出现ExternalException异常
// 经常在调用Save方法的时候都会出现 一个GDI一般性错误,主要原因是文件没有被释放,当保存到原位置时,就会出现该异常,要避免这个错误就要释放图片占有的资源
newbitmap.Dispose();
if (index != imgArray.Count - 1)
{
SwitchImg(index
+ 1);
}
else
{
SwitchImg(
0);
}
}


2.2 图片旋转功能的实现


上面的代码实现了第一个功能点的问题了,下面就解释下如何实现第二个功能点——图片旋转的问题:


对于Windows自带的图片查看器,它旋转的角度只能顺时针旋转90或逆时针旋转90度,这个功能实现起来可以说非常简单,只需要使用Image.RotateFlip(RotateFlipType)方法就可以完成的,有些朋友也想对图片实现旋转任意角度,对于这个问题源码中也有具体的实现,大家可以从文章的最后下载源码进行查看,这里就不贴出具体代码的,下面就看看如何实现Windows自带的图片查看器的旋转功能的代码:



   // 顺时针旋转90度旋转图片
private void btnRotate_Click(object sender, EventArgs e)
{
picBoxView.SizeMode
= PictureBoxSizeMode.Zoom;

// 顺时针旋转90度的另外一种实现
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度的另外实现
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 对旋转图片的保存功能的实现


最后就是针对旋转图片保存的实现了,此时我参考了Windows自带图片查看器的实现方式,因为我用Windows自带图片查看器浏览图片的实现,当我旋转图片时,它并不是实时地保存到旋转的图片的,而是当我关闭Windows自带图片查看器的时候,旋转的图片才保存到文件中的,有了这个思路之后,我就把我保存的代码逻辑放在窗体的关闭的事件处理程序中来实现的,此时保存的功能我们只需要调用Image.Save(path)方法就可以完成对图片的保存,下面就看看具体代码的实现的:



 // 关闭窗体后保存旋转后的图片到文件中
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;
}
}


三、实现效果


上面已经介绍了实现该程序的一个思路的,朋友是不是迫不及待的想看到到底自定义图片查看器是什么样子的呢?下面就通过一个动画来让大家更形象地看到程序的运行效果的:



 


四、小结


到这里该文章的内容就介绍结束了,希望大家如果遇到类似的问题可以很快从这篇博客中得到解决,另外附带下MSDN中这个问题的链接:


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


本专题源码下载:图片查看器


 

本文链接

分享到:
评论

相关推荐

    C#实现Windows中图片查看器的功能

    在本文中,我们将深入探讨如何使用C#编程语言来实现一个功能完备的Windows图片查看器。这个图片查看器不仅能够浏览图片,还支持图片的旋转和保存旋转后的图像。我们将会涉及以下几个关键知识点: 1. 图像处理库:在...

    c#winform 图片查看器.zip

    在C# WinForm环境下开发一个图片查看器是一个常见的任务,涉及到Windows应用程序界面设计、图像处理以及用户交互等多个方面的知识。这个“c#winform 图片查看器.zip”压缩包很可能包含了一个实现这些功能的源代码...

    图片查看器(C#开发)

    标题中的“图片查看器(C#开发)”指的是一个利用C#编程语言开发的图像查看应用程序。C#是微软推出的一种面向对象的、现代化的编程语言,常用于开发Windows桌面应用、Web应用以及游戏等。在本项目中,它被用来创建一个...

    图片查看器源码C#C#

    【标题】"图片查看器源码C#C#"是一个基于C#编程语言的项目,用于创建一个简单易用的图片浏览应用程序。这个源代码实例展示了如何在C#窗体中集成图片显示功能,并且利用滚动条来实现图像的平移。 【描述】提到的"C#...

    c# 图片查看器

    在本文中,我们将深入探讨如何使用C#编程语言创建一个简单的图片查看器,这与Windows自带的图片传真器类似。这个应用程序将使用户能够轻松地查看和导航图像文件,为日常图片浏览提供便利。 首先,我们需要理解C#的...

    C#开发winform图片放大缩小,类似windows的图片查看器

    结合网上的一些源码和书上的源码弄了个C#开发的winform的简易图片放大缩小。功能:打开图片,支持放大和缩小功能,一开始能展现全图,能无限放大和缩小到原图。保持居中展示。滚动条保持居中。还有一个可以旋转的请...

    C#复习之图片查看器

    在C#编程中,开发一个图片查看器是一个很好的实践项目,可以帮助巩固面向对象编程、图形用户界面(GUI)设计以及图像处理的相关知识。本项目旨在模拟Windows照片查看器的功能,虽然在图片大小缩放方面遇到了问题,但...

    使用C# WPF实现图片查看器,支持鼠标拖动和滑轮控制放大缩小

    在本文中,我们将深入探讨如何使用C#的Windows Presentation Foundation(WPF)框架来创建一个基本的图片查看器。这个图片查看器不仅能够显示图片,还支持通过鼠标拖动进行平移以及使用鼠标滚轮进行缩放。我们将涵盖...

    C#简单图片查看器

    在本文中,我们将深入探讨如何使用C#编程语言构建一个简单的图片查看器,该查看器具备基本的图片浏览和旋转功能。C#是一种强大的、面向对象的编程语言,广泛应用于Windows应用程序开发,其中包括图像处理软件。 ...

    C# 写的图片查看器,实现了图片的放大缩小旋转,等功能

    本项目是一个用C#编写的图片查看器,利用了WinForm库来构建用户界面,实现了图像的查看、放大、缩小和旋转等基本功能。下面将详细探讨这些知识点。 首先,WinForm是.NET Framework的一部分,提供了一组丰富的控件和...

    用c#语言实现的WPF图片查看器

    标题"用c#语言实现的WPF图片查看器"指出,这是一个使用C#编程语言开发的应用程序,专为查看图像而设计。它基于Windows Presentation Foundation(WPF),这是.NET Framework的一个重要组件,用于构建具有丰富用户...

    图片查看器C#版

    一个C#毕业设计完整源码+文档:图片查看器,由广东交通职业技术学院计算机工程学院学生所编写。本图片浏览器是一款集动态图片查看,音乐视听,截图抓屏、图片简单滤镜处理等功能与一体的图片管理软件,是一款比较...

    C#图片查看器

    在本文中,我们将深入探讨如何使用C#编程语言创建一个简单的图片查看器。这个图片查看器能够打开指定文件夹中的所有图片,并通过按键导航来浏览这些图片。这将涵盖C#的基本概念、图像处理以及用户界面设计。 首先,...

    C# WPF实现的图片处理小工具,可进行图片裁剪、缩放、涂鸦、旋转、查看图片信息、保存

    在本文中,我们将深入探讨如何使用C#编程语言和Windows Presentation Foundation(WPF)框架来构建一个图片处理小工具。这个工具集成了多种功能,包括图片裁剪、缩放、涂鸦、旋转以及查看和保存图片信息。我们将讨论...

    C# winform 医学影像信息Dicom图片文件查看器.zip

    本项目“C# winform 医学影像信息Dicom图片文件查看器”是基于C#编程语言和Windows Forms(winform)框架开发的一个应用程序,专门设计用于查看和处理DICOM图像文件。以下将详细介绍该程序的关键知识点: 1. **C#...

    C# DLL源码查看器

    总的来说,C# DLL源码查看器如ILSpy是一个强大的开发工具,能够帮助程序员理解、学习和调试使用C#编写的库,提升了软件开发的效率和质量。它揭示了.NET世界中的黑盒,使开发者能够更深入地探索和利用已有的代码资源...

    c#图片查看源码

    在C#编程环境中,开发一个图片查看器是一个常见的任务,特别是在使用Visual Studio 2008这样的集成开发环境(IDE)时。这个项目涉及到多个关键知识点,包括图像处理、用户界面设计、事件处理以及控件操作。下面我们...

    c#图片拼接以及梯形图片的实现

    在C#编程环境中,制作图片拼接和梯形图片涉及到图像...总的来说,C#提供了强大的图形处理能力,可以轻松实现图片拼接和梯形图片的制作。通过学习和实践,你可以创建出各种复杂的图像效果,拓宽在图形处理领域的知识。

    C#如何实现图片查看器

    在IT领域,开发一个图片查看器是常见的任务之一,尤其对于使用C#这种面向对象的编程语言来说。本文将深入探讨如何使用C#来实现一个具备基本图片查看、放大、缩小和旋转功能的图片查看器,类似于Windows操作系统自带...

Global site tag (gtag.js) - Google Analytics