制作一个简单的WPF图片浏览器

目前创新互联已为千余家的企业提供了网站建设、域名、虚拟主机、网站托管、服务器托管、企业网站设计、前郭网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
这里将实现以下几个功能:
1. 对指定文件夹下所有JPG文件进行预览
2. 对选定片进行旋转
3. 对选定片进行灰度处理
4. 对选定片进行裁切处理
5. 无限制的恢复功能
6. 类似加入购物车的功能
以下来看看其实现过程。
1. 建立一个ImageFile类,用来读取像文件:
- // ImageFile.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Windows.Media.Imaging;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class ImageFile
 - {
 - private String _path;
 - public String Path { get { return _path; } }
 - private Uri _uri;
 - public Uri Uri { get { return _uri; } }
 - private BitmapFrame _image;
 - public BitmapFrame Image { get { return _image; } }
 - public ImageFile(string path)
 - {
 - _path = path;
 - _uri = new Uri(_path);
 - _image = BitmapFrame.Create(_uri);
 - }
 - public override string ToString()
 - {
 - return Path;
 - }
 - }
 - }
 
2. 建立一个像列表的类,用于取得指定目录下的所有jpg像文件:
- // PhotoList.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Collections.ObjectModel;
 - using System.IO;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class PhotoList : ObservableCollection
 - {
 - DirectoryInfo _directory;
 - public DirectoryInfo Directory
 - {
 - set
 - {
 - _directory = value;
 - Update();
 - }
 - get { return _directory; }
 - }
 - public string Path
 - {
 - set
 - {
 - _directory = new DirectoryInfo(value);
 - Update();
 - }
 - get { return _directory.FullName; }
 - }
 - public PhotoList() { }
 - public PhotoList(DirectoryInfo directory)
 - {
 - _directory = directory;
 - Update();
 - }
 - public PhotoList(string path) : this(new DirectoryInfo(path)) { }
 - private void Update()
 - {
 - foreach (FileInfo f in _directory.GetFiles("*.jpg"))
 - {
 - Add(new ImageFile(f.FullName));
 - }
 - }
 - }
 - }
 
这里有两个公共属性:Directory和Path,用来获取或设置像目录信息和路径,还有一个Update()私有方法,当文件路径变化时,更新最新的像文件列表数据。
3. 建立后期处理的类。
由于后期加工均涉及“印”,所以就建立一个名为“印类型”(PrintType)的类:
- // PrintType.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class PrintType
 - {
 - private string _description;
 - public string Description { get { return _description; } }
 - private double _cost;
 - public double Cost { get { return _cost; } }
 - public PrintType(string description, double cost)
 - {
 - _description = description;
 - _cost = cost;
 - }
 - public override string ToString()
 - {
 - return _description;
 - }
 - }
 - }
 
这里有两个只读属性:描述Description和费用Cost,还对ToString()方法进行了重载。
#p#
4. PrintTypeList类,是PrintType列表的集合。
- // PrintTypeList .cs
 - using System;
 - using System.Collections.Generic;
 - using System.Collections.ObjectModel;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class PrintTypeList : ObservableCollection
 - {
 - public PrintTypeList()
 - {
 - Add(new PrintType("4x6 Print", 0.15));
 - Add(new PrintType("Greeting Card", 1.49));
 - Add(new PrintType("T-Shirt", 14.99));
 - }
 - }
 - }
 
5. 建立一个PrintBase的类:
- // PrintBase.cs
 - using System;
 - using System.Collections.Generic;
 - using System.ComponentModel;
 - using System.Windows.Media.Imaging;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class PrintBase : INotifyPropertyChanged
 - {
 - #region public property
 - private BitmapSource _photo;
 - public BitmapSource Photo
 - {
 - set { _photo = value; OnPropertyChanged("Photo"); }
 - get { return _photo; }
 - }
 - private PrintType _PrintType;
 - public PrintType PrintType
 - {
 - set { _PrintType = value; OnPropertyChanged("PrintType"); }
 - get { return _PrintType; }
 - }
 - private int _quantity;
 - public int Quantity
 - {
 - set { _quantity = value; OnPropertyChanged("Quantity"); }
 - get { return _quantity; }
 - }
 - #endregion public property
 - public PrintBase(BitmapSource photo, PrintType printtype, int quantity)
 - {
 - Photo = photo;
 - PrintType = printtype;
 - Quantity = quantity;
 - }
 - public PrintBase(BitmapSource photo, string description, double cost)
 - {
 - Photo = photo;
 - PrintType = new PrintType(description, cost);
 - Quantity = 0;
 - }
 - public event PropertyChangedEventHandler PropertyChanged;
 - private void OnPropertyChanged(String info)
 - {
 - if (PropertyChanged != null)
 - PropertyChanged(this, new PropertyChangedEventArgs(info));
 - }
 - public override string ToString()
 - {
 - return PrintType.ToString();
 - }
 - }
 - }
 
这里有三个可读写属性:Photo, PrintType和Quantity(表示片的数量),还设置了一个PropertyChanged委托,用于当属性变更时做相应的事件处理。
6. 继承自PrintBase的三个类:Print, GreetingCard, TShirt, 分别用来打印,制成贺卡及制作T恤衫。
- // Print.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Windows.Media.Imaging;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class Print : PrintBase
 - {
 - public Print(BitmapSource photo) : base(photo, "4x6 Print", 0.15) { }
 - }
 - }
 - // TShirt.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Windows.Media.Imaging;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class TShirt : PrintBase
 - {
 - public TShirt(BitmapSource photo) : base(photo, "T-Shirt", 14.99) { }
 - }
 - }
 - // GreetingCard.cs
 - using System;
 - using System.Collections.Generic;
 - using System.Windows.Media.Imaging;
 - using System.Text;
 - namespace PhotoDemo
 - {
 - public class GreetingCard : PrintBase
 - {
 - public GreetingCard(BitmapSource photo) : base(photo, "Greeting Card", 1.49) { }
 - }
 - }
 
7. "印"的集合:PrintList
- // PrintList.cs
 - using System;
 - using System.Collections.ObjectModel;
 - namespace PhotoDemo
 - {
 - public class PrintList : ObservableCollection
 { } - }
 
                文章名称:教你制作一个简单的WPF图片浏览器
                
                链接分享:http://www.csdahua.cn/qtweb/news31/139231.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网