PictureEdit 使用

来源:互联网 发布:取色软件 编辑:程序博客网 时间:2024/06/14 15:02
很久之前写了一段程式,内容是关于,存放员工相片的一段代码;


其实很多人事系统中都有这个功能,
无外乎几种情况,
第一种情况,把相片存到数据库中;
第二种情况,把图片存到一个共用目录下面;


我的选择是存到共用目录下面,
其中关于存取相片,我做了几个功能:
1.照片可以从磁碟任何位置导入;
2.可以讲照片存入磁碟指定的位置;
3.如果没有照片,而且电脑上面有摄像头功能,可以直接拍照,并选择个人得意的大头贴,然后保存;


不要看程序小,麻雀虽小五脏俱全,说实在的,要做好也不是件简单的事情,这不,今天就被领导检查出来一些平时忽略了问题,细想起来,有必要记录下来,以便日后有立竿见影的作用;


第一个问题:取相片的路径。
 我最开始是放在和执行文件同一个目录,在老大的开导下,终于想明白了,一个小问题,一直被忽略,但是要是真正不用户使用的时候,问题就来了。因为,这样每个操作者存放的照片不能共享。
解决的办法是,增加一个configure 文档,把照片存放的路径当常量保存。如果是联机操作,则需要把此文件共享到共用盘目录下面,并映射相同的指定路径。


第二个问题,图片加载到一个PictureEdit控件中,后来想更换图片,却发现图片已经被占用,无法进行删除等操作。




最原始的做法是: PictureEdit1.Image = Image.FromFile(路径)


这样做一般不会出现状况,关键时候就会拉稀吧。在保存的时候,就会报错。


处理的问题的方式也是多种了,如下是我想到的思路,和大家分享一下。
第一种方式,把图片复制到一个临时文件夹下面,取数据从临时文件夹下面取,存储的时候存到图片的实际位置。在加载照片的时候删除临时文件。此乃方法一。


第二种方式是,读取文件流,其实照片和我们平时使用的text文体,word文件等一样,都是一个文件,存放在磁碟中都是二进制。代码如下:


FileStream fs = new FileStream(路径, FileMode.Open, FileAccess.Read); 
int   byteLength   =   (int)fs.Length; 
byte[]   wf   =   new   byte[byteLength]; 
fs.Read(wf,0,byteLength); 
fs.Close(); 
Image   img   =   Image.FromStream(new MemoryStream(wf));


PictureEdit1.Image = img;
这种方法是,在照片加载到PictureEdit1 中之后,存放照片的物理位置还能够直接删除;


第三种方法是:调用.Net内裤中的Dispose方法。


 Image image = Image.FromFile(路径);
 Image bmp = new Bitmap(image); 
 image.Dispose();
 PictureEdit1.Image = bmp;


俗话说:严师出高徒。也藉此希望自己以后能够写代码更加严谨。多思考,多做。日后在此论坛中和各位朋友多交流。