C# 2.0中的上传多个图片合并及存入数据库的示例

//fu_SelectImage(VS2005自带上传控件)
byte[] FileByteArray = fu_SelectImage.FileBytes;//图象文件临时储存Byte数组
Stream StreamObject = fu_SelectImage.FileContent;//建立数据流对像

Response.Write("文件长度为:"+ FileLength + "文件名为:" + fu_SelectImage.FileName + "文件类型为:" + fu_SelectImage.GetType().Name); //用来自己看看的。

//定义一个新的byte[]用来存放数据库中的图片byte[]
byte[] FileByteOldArray = new byte[1];

DataHandle dh = new DataHandle(); //这个是朋友写好的数据库操作类直接拿来用上了,主要是读取数据库指定字段内容。
dh.TargetTableName = "ImageStore"; //存图片的数据表
dh.DbConditionAdd("ImageID",5); //图片的ID(ID可以从网址参数处获得getimage.aspx?id=5)
SqlDataReader rd = dh.ExecuteReader();
if (rd.Read())
{
FileByteOldArray = (byte[])rd["ImageData"]; //从数据库取出图片的byte[],数据库此字段为Image类型
}
rd.Close();
dh.Close();

//将图像的字节数组放入内存流
MemoryStream oldms = new MemoryStream(FileByteOldArray); //存放数据库的图片字节数组内存流
MemoryStream newms = new MemoryStream(); //用来存放合并后的内存流

//合并位图,这个部分是关键,从这里也可以演化左右合并之类的。当然图片的缩小也差不多思路
Bitmap b1 = new Bitmap(oldms); //oldms老的存在数据库的内存流
Bitmap b2 = new Bitmap(StreamObject); //StreamObject新上传的图片流
Bitmap b = new Bitmap(b1.Width > b2.Width ? b1.Width : b2.Width, b1.Height + b2.Height+1);
Graphics g = Graphics.FromImage(b);
g.DrawImage(b1,0,0);
g.DrawImage(b2, 0, b1.Height+1);//上下合并,把新图片放到老图片的下面,这个1主要是为了有1px的间隔,也可以去的。

//把合并后的位图保存到内存流中
b.Save(newms, ImageFormat.Jpeg);

//从合并后图片的内存流中取得存放数据库所需的相关参数
byte[] FileByteNewArray = newms.GetBuffer();
FileLength = FileByteNewArray.Length;

//释放资源
oldms.Dispose();
newms.Dispose();
b1.Dispose();
b2.Dispose();
b.Dispose();
g.Dispose();

//建立SQL Server链接
SqlConnection Con = new SqlConnection("Data Source=Localhost;Initial Catalog=MapPointManageDemo;User ID=sa;Pwd=sa;");
//String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType,ImageDescription, ImageSize) valueS (@Image, @ContentType,@ImageDescription, @ImageSize)";
String SqlCmd = "UPDATE ImageStore SET ImageData = @Image, ImageSize = ImageSize + @ImageSize WHERE ImageID = 5";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@Image", SqlDbType.Binary, FileLength).Value = FileByteNewArray;//保存图片byte[]
//CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar, 50).Value = "image/jpeg"; //记录文件类型
//CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar, 200).Value = txtDescription.Text;//把其它单表数据记录上传
CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt, 8).Value = FileLength;//记录文件长度,读取时使用
Con.Open();
CmdObj.ExecuteNonQuery();
Con.Close();

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值