第23卷第5期 电脑开发与应用
文章编号:1003-5850(2010)05-0021-03
基于C#语言不同设计模式的图片存储与显示
PictureAccessandDisplayofDifferentDesignPatternsinC#Language
方玉燕
(嘉兴职业技术学院信息与管理分院 浙江嘉兴 314000)
【摘 要】图片是人们传递与
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达信患的重要形式,处理也日益频繁,而图片的存取和显示因其数据的特殊性显
得比较复杂。同时随着.NET开发平台的发展,越来越多的程序员选择.NET作为软件的开发平台。介绍了
NET开发平台c/s和B/S这种二种开发模式中图片数据不同的存取和显示方式。并讨论了如何选择合适的方
式进行图片数据的存储处理。给出了C#语言关键性代码。
【关键词】C#语言,图片数据,数据存取
中图分类号:TP393.09 文献标识码:A
ABSTRACTPicturesareanimportantformofinformationtransferandexpression,processingwithincreasinglyfrequent.The
particularityofpicturesdatacausesmorecomplexforaccessanddisplay.Withdevelopmentofthedotnet,moreandmore
programmerchoicesdotnetforsoftwaredevelopmentplatform.ThispapermainlyintroducesNETdevelopmentplatformintheC/
SandB/SthattWOkindsofdevelopmentpatternsinthepicturedataofdifferentuploadanddisplay.Anddiscussedhowtochoose
therightwaytOstorageandprocesspicturesofdata.InthearticlegiventhekeycodeinC#language·
KEYWORDSC#language,picture-data。data—access
随着微软.NET平台功能的不断完善,.NET技
术真正的价值也不断向用户展现,作为.NET平台的
原生语C#也迸发出其强大的活力,越来越多的程序
员使用C#进行软开发。图片作为目前常见的一种数
据类型,其存取方式较文本要复杂得多。本文讨论了图
片存取操作用C#语言实现
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。
图片的存储主要有2种方式:一种是把图片放在
项目指定的目录中,把图片的地址放在数据库中;第二
种是把图片数据直接存放在数据库中。下面分别对不
同的程序设计模式和存储方式进行讨论,给出了C#
语言关健的代码。
1数据库设计
本文使用SQLSERVER2000来存放图片数据
库,根据不同的存放方式简单设计了两个数据表。图1
用存放图地址的方式来设计数据表,图2把图片直接
存人到数据库中。
图1地址存放方式的数据表设计
图2数据方式存放的数据表设计
2 c/s编程模式中的图片处理方式
2.1以文件方式进行图片存取
在Windows编程中,主要通过System.IO命名
空间中的相关类进行读写文件,Filelnfo类指定读和
写文件的地址,FileStream类的Read()方法把文件内
容写入内存,Write()方法完成在指定的路径中写入图
片数据。设计思路如下:
通过单击“选择图片文件”按钮,并使用
openFileDialog组件选择要上传的图片文件,并在文
本框中显示选择文件当前的完整路径。为了便于管理,
在项目中设置了一个子目录“images”。当前项目的在
“选择图片文件”按钮的单击事件中完成文件上传的功
能。指定目录当前的物理地址可以通过
Application.StartupPath来获取。
2.1.1上传图片
在“选择图片文件”按钮的单击事件中添加如下关
* 2009—12—29收到,2010—03—15改回
**方玉燕,女,1968年生,本科,讲师.研究方向:基于.NET的软件开发。
万方数据
·22· (总362) 基于C#语言不同设计模式的图片存储与显示 2010焦
键代码:
//设置图片存放的目录
stringstartpath=Application.StartupPath+@”\images
V,
利用OpenFileDialog组件获取上传文件的文件名
stringfilename=openFileDial091.FileName.Substring
(openFileDial091.FileName.LastlndexOf(@“V)+1);
stringfileaddress=startpath+filename,III要写入的
文件的地址
Filelnfowritefile=newFileInfo(fileaddress)l
FileInforeadfile=newFileInfo(openimg.FileName);要
读取的文件的地址
FileStreamimgstream}定义文件操作类
//读取文件内容
intimgdatalen=(int)readfih.Length;//获取读取的文
件的长度
byte[]imgdata=newbyte[imgdatalen]}
imgstream=readfile.OpenRead()l
intn2imgstream.Read(imgdata,0,imgdatalen)l
imgstream.Dispose()l
//写入文件到到指定目录
imgstream2writefile.OpenWrite()I
imgstream·Write(imgdata,0,imgdatalen)I
imgstream.Close(),
pietureBoxl·ImageLoeation2openimg.FileName
//在数据库保存的是上传图片相对路径
SCOlq毗D-2newSqICommand(”add—imageadd”,sconn),
scomm.CommandType =
CommandType.StoredProcedurel
scomm·Parameters.Add( ” @imgn_,
SqlDbType.VarChar,20).Value=filename;
scomm·Parameters.Add( 。(孕imgaddⅣ.
SqlDbType·VarChar。200).Value=@“\images\”+
filename,
scomm·ExecuteNonQuery(),
scomm·Dispose()’
comboBoxl.Items.Add(filename)‘
注:上传文件采用重新命名的方式,直接对
“filename”这个变量设置新的文件名就可以了。
2.1.2显示图片
数据库有多少图片用户并不知道,在设计中用一
个comboBox控件列出数据库中所有可以显示的图片
文件名,用户可以通过选择要显示的图片文件来显示
图片。
//显示目前数据库中所有图片的文件名
comboBoxl.Items.Clear()‘
scomnl=newSqlCommand(”selectimageID,imagename
fromaddimage”,sconn)-
sdr=scomm.ExecqteReader();
while(sdr.Read())
comboBoxl.Items.Add(sdr[”imagename”].ToString()),
在WINFORM编程中显示图片可以用
pictureBox控件,对显示图片pictureBox控件设置
pictureBoxl.ImageLocation属性可以显示图片。显示
文件要有完整的路径。
scorn=newSqlCommand(”selectimageID,imageaddress
fromaddimagewhereimagename=@img”,sconn);
scom.Parameters.Add(”(密img”,SqlDbType.VarChar,
20).Value=comboBoxl.Selectedhem.ToString()l
sdr=scomm.ExecuteReaderOI
if(sdr.ReadO)
{//显示图片
pictureBoxl.ImageLocation=Application.StartupPath+
sdr[”imageaddress”].ToString(),
)
sdr.CloseO;
scomm.Dispose();
)
2。2以数据方式进行存放的上传和显示
2.2.1上传图片
图片的另一种存放方式是直接把图片数据写入到
“image”类型或是“binary”类型字段中。因为图片数据
较大,如果无论什么图片都以数据的方式进行存放,会
影响数据库的性能。一般来说比较小的图片才会以数
据的形式写入数据库。在图片上传之前最好能对图片
进行大小的判断。关键代码如下:
Filelnforeadfile=newFilelnfo(openimg。FileName);
FileStreamimgstream=readfile.OpenRead()’
//读取文件内容
intimgdatalen=(int)readfile.Length
byte[]imgdata=newbyte[imgdatalen]-
imgstream.Read(imgdata·0,imgdatalen),
mstream=newMemoryStream(imgdata)I
Bitmapbm2newBitmap(mstream)I
//判断图片的宽度和长度。符合
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
的写人数据库中
if(bm.Width<400&&bm.Height<400)
(stringimgtype=@’image/”+Path·GetExtension
(openimg.FileName).Substring(1)I
stringimgn = commstrcontrol·getfilename
万方数据
第23卷第5期 电脑开发与应用
(openimg.FileName),
8comm=newSqlCommand(一add—imagedata。,sconn);
scomm.CommandType =
CommandType.StoredProcedure,
scomm.Parameters.Add( 。 @imgn”,
SqlDbType.VarChar.50).Value=imgn
scomm·Parameters.Add( ’ @imgt4,
SqlDbType.VarChar.20).Value=imgtype;
scomm.Parameters.Add(”@imgd。,SqlDbType.Image)
.Value=imgdata‘
scomm.ExecuteNonQuery(),
scomm.Dispose(),
eomboBoxl.Items.Add(imgn)I}
else
MessageBox.Show(”图片太大了”),
2.2.2显示图片
图片的显示是通过对pictureBox控件的Image
属性来显示图片。
byte[-]pbyte}
scomm2newSqlCommand(”selectimagelD.imagdata
fromdataimagewhereimagename--@imgn”,storm)l
scomm·Parameters.Add( ” @imgn”·
SqlDbType.VarChar,20).Value=· eomboBoxl.
Selectedltem.ToString();
sdr2scomm.ExeeuteReaderO,
if(sqldr.Read())
{pbyte=(byte[-])sdr[-”imagedata"]l
∥在pieturbox中显示图片
mstream2newMemoryStream(pbyte)I
pictureBox2.Image2newBitmap(mstream)I)
3 B/S编程模式中的图片处理方式
在WEB编程中图片文件上传非常简单,通过
FileUpload控件的SaveAs()方法,就可以将文件从用
户的计算机发送到服务器并在数据库中存放文件的相
对地址。在WEB方式编程中,要显示图片只要设置
Image控件的ImageUrl属性。
ImageI·ImageUrl=@”~”+dr[”imageaddress”]
.ToString()l
以数据方式存放的图片要在WEB页面中显示则
比较麻烦,一般采用把二进制图片数据通过
Response.BinaryWrite()方法输出到WEB页面中,再
设置ImageUrl指向显示图片的WEB页面,代码如
下:
’/
>
然后建立页面showImage.aspx,在页面的Page—
Load事件中添加如下代码:
stringID=Request.QueryString[-”ID"];
if(ID==null)returnl
SqIConnectionsconn2newSqIConnection(”DataSource
=(10cal),InitialCatalog2imageconI IntegratedSecurity=
True”);
con。Open();
SqlCommandemd=newSqICommand(”selectPhoto
fromdataimagewhereimagelD=”+ID,sconn)l
if(1(Convert.IsDBNull(cmd.Exeeutesealar())))
{byte[-3buffer=(byte[])emd.Executescalar()l
con.Close();
Response.BinaryWrite(buffer)I
Response.End(),}
4总结
如何选择图片的存放方式。笔者认为没有一定定
式。这两种存放方式也各有利弊,主要还是根据图片大
小,量的多少以及项目的管理情况而定。
由于图片的数据量比较大,采用直接数据存储方
式会造成整个数据库访问速度变缓。但是在进行信息
记录管理时比较方便。因此一般在图片与其他信息关
系比较密切且图片相对较小时采用这种方式存储还是
比较合适的,如会员照片。
如果图片比较大、同其他数据信息关系松散、多个
数据记录使用同一个图片等这些情况,那么主要采用
文件方式存储比较好。缺点是管理比较麻烦,数据库里
其他相关信息被删除时,同时要根据情况在代码中要
实现图片的同步删除。
参考文献
E1]蒋铁海.ASP.NET无组件上传图片到SQLServer数
据库的实现[J].信息技术。2006(1):105—107.
[2]邓昭俊,黎文星.图片存储于数据库的意文及控件其
大小的方法[J].科技资讯,2006(15):138-139.
[3]毕传林,占跃华.基于.NET的Image数据类型字段
的应用[J].沿海企业与科技,2008(2);36—37.
[4]李敏波译.C#高级编程(第4版)[M].北京:清华大
学出版社,2006.
万方数据
基于C#语言不同设计模式的图片存储与显示
作者: 方玉燕, Fang Yuyan
作者单位: 嘉兴职业技术学院信息与管理分院,浙江嘉兴,314000
刊名: 电脑开发与应用
英文刊名: COMPUTER DEVELOPMENT & APPLICATIONS
年,卷(期): 2010,23(5)
参考文献(4条)
1.李敏波 C# 高级编程 2006
2.毕传林;占跃华 基于.NET 的Image 数据类型字段的应用[期刊
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
]-沿海企业与科技 2008(02)
3.邓昭俊;黎文星 图片存储于数据库的意文及控件其大小的方法 2006(15)
4.蒋铁海 ASP.NET无组件上传图片到SQL Server数据库的实现[期刊论文]-信息技术 2006(01)
本文链接:http://d.g.wanfangdata.com.cn/Periodical_dnkfyyy201005008.aspx