81

简单就是美!
posts - 54, comments - 317, trackbacks - 0, articles - 0

C#减少图片文件大小和尺寸

Posted on 2006-08-15 10:29 81 阅读(1419) 评论(2)  编辑 收藏

有一个员工管理,需要在数据库字段中保存员工的照片,但已有的照片非常巨大,1024*768, 2M左右,这么大的数据存入数据库,不管是对管理或是传输都是问题,而实际上登记照只要很小就行了,下面进行减肥(C#):


//可以读取一些常用的格式,如jpg,bmp等
Bitmap myBitmap = new Bitmap("c:\\t.bmp"); 

//生成80*100的缩略图
Image myThumbnail = myBitmap.GetThumbnailImage(80, 100, null, IntPtr.Zero);
System.IO.MemoryStream ms = new System.IO.MemoryStream();

//把生成的缩略图按jpg格式写入到流ms,把这个流转到byte[]并写到数据库就行了,
//如果有需要,也可以把ms流写入到文件
myThumbnail.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

另外:从数据库中读取的照片也可以不存到文件,而直接与Windows控件PictureBox直接绑定显示
//PictureBox控件可以直接显示从数据库中读取byte[]的图片, 见下例
System.IO.MemoryStream ms_p = new System.IO.MemoryStream(byte[] b);
Bitmap bmp = new Bitmap(ms_p);
this.pictureBox1.Image = bmp;

经过以上减肥后,一张照片只有5K左右,程序效率得到提高。

Feedback

#1楼   回复  引用  查看    

2006-08-15 11:04 by aspnetx      
收藏

#2楼   回复  引用    

2008-02-26 15:48 by 啊小黑啊[未注册用户]
这个内存流转成byte[]后 是能存进数据库
但是在读出来的时候
string str_1 = "select pic from pictures where id = 1";
SqlConnection con = new SqlConnection("Data Source = (local);Integrated Security = SSPI;Initial Catalog=pictest");
con.Open();
SqlCommand cmd = new SqlCommand(str_1, con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
FileInfo fi = new FileInfo("temp");
FileStream myStream = fi.Open(FileMode.Create);
byte[] mydata = ((byte[])dr["pic"]);
foreach (byte a in mydata)
{
myStream.WriteByte(a);
}
myStream.Close();
Image myImage = Image.FromFile("temp");
pictureBox2.Image = myImage;
pictureBox2.Refresh();
dr.Close();

}
else
{
MessageBox.Show("没有成功读入数据!");

}
con.Close();

Image myImage = Image.FromFile("temp");

执行到这里的时候就出现 内存不足的错误
希望哪位大虾能帮忙解决下。
谢谢
QQ
47879616



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 477143


相关文章:

相关链接: