最近做到一个小项目,其中关系到图片的一些操作。比如:将图片保存到数据库中、从数据库中读取图片、显示图片、打印图片等。此处对这些在项目中遇到的一些琐碎知识加以总结,以便日后查找。 1、将图片作为其中的一个参数保存到数据库中 在项目中,一般是将图
最近做到一个小项目,其中关系到图片的一些操作。比如:将图片保存到数据库中、从数据库中读取图片、显示图片、打印图片等。此处对这些在项目中遇到的一些琐碎知识加以总结,以便日后查找。
1、将图片作为其中的一个参数保存到数据库中
在项目中,一般是将图片转换成二进制流格式,然后保存到数据库中。同时数据库表中存储图片的格式一般为image。此次项目,是将图片作为一个参数,和其他几个参数一起保存到数据库中,和在网上搜索到的图片保存不太一样,此处稍作修改,但都是检测过的。
存储步骤:
1、搜索到图片的路径
2、读取图片并将图片转换成二进制流格式
3、sql语句保存到数据库中。
贴代码:
<span>private</span> <span>void</span> btnWrite_Click(<span>object</span><span> sender, EventArgs e)
{
OpenFileDialog ofd </span>= <span>new</span><span> OpenFileDialog();
ofd.Filter </span>= <span>"</span><span>*jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP</span><span>"</span><span>;
</span><span>if</span> (ofd.ShowDialog() ==<span> DialogResult.OK)
{
</span><span>string</span> filePath = ofd.FileName;<span>//</span><span>图片路径</span>
FileStream fs = <span>new</span><span> FileStream(filePath, FileMode.Open);
</span><span>byte</span>[] imageBytes = <span>new</span> <span>byte</span><span>[fs.Length];
BinaryReader br </span>= <span>new</span><span> BinaryReader(fs);
imageBytes </span>= br.ReadBytes(Convert.ToInt32(fs.Length));<span>//</span><span>图片转换成二进制流</span>
<span>string</span> strSql = <span>string</span>.Format(<span>"</span><span>insert into [SBS].[dbo].[Model] ([M_QRCode],[M_Skills] ) values (@image,'2')</span><span>"</span><span>);
</span><span>int</span> count =<span> Write(strSql,imageBytes );
</span><span>if</span> (count > <span>0</span><span>)
{
MessageBox.Show(</span><span>"</span><span>success</span><span>"</span><span>);
}
</span><span>else</span><span>
{
MessageBox.Show(</span><span>"</span><span>failed</span><span>"</span><span>);
}
}
}</span>数据库连接和保存图片语句:


<span>private</span> <span>int</span> Write(<span>string</span> strSql,<span>byte</span><span>[] imageBytes)
{
</span><span>string</span> connStr = <span>"</span><span>Data Source=192.168.4.132;initial Catalog=SBS;User ID=sa;Password=sa;</span><span>"</span><span>;
</span><span>using</span> (SqlConnection conn = <span>new</span><span> SqlConnection(connStr))
{
</span><span>using</span> (SqlCommand cmd = <span>new</span><span> SqlCommand(strSql, conn))
{
</span><span>try</span><span>
{
conn.Open();
SqlParameter sqlParameter </span>= <span>new</span> SqlParameter(<span>"</span><span>@image</span><span>"</span><span>, SqlDbType.Image);
sqlParameter.Value </span>=<span> imageBytes;
cmd.Parameters.Add(sqlParameter);
</span><span>int</span> rows =<span> cmd.ExecuteNonQuery();
</span><span>return</span><span> rows;
}
</span><span>catch</span><span> (Exception e)
{
</span><span>throw</span><span>;
}
}
}
}</span>
2、从数据库总读取图片
从数据库中读取图片字段,并转换成内存流生成bitmap。
贴代码:
<span>private</span> <span>void</span> btnRead_Click(<span>object</span><span> sender, EventArgs e)
{
</span><span>string</span> strSql = <span>string</span>.Format(<span>"</span><span>select M_QRCode from [SBS].[dbo].[Model] where M_id = 7</span><span>"</span>);<span>//</span><span>图片保存的字段是M_QRCode</span>
<span> Read(strSql);
}
</span><span>private</span> <span>void</span> Read(<span>string</span><span> strSql)
{
</span><span>string</span> connStr = <span>"</span><span>Data Source=192.168.4.132;initial Catalog=SBS;User ID=sa;Password=sa;</span><span>"</span><span>;
</span><span>using</span> (SqlConnection conn = <span>new</span><span> SqlConnection(connStr))
{
</span><span>using</span> (SqlCommand cmd = <span>new</span><span> SqlCommand(strSql, conn))
{
conn.Open();
SqlDataReader sqlDr </span>=<span> cmd.ExecuteReader();
sqlDr.Read();
</span><span>byte</span>[] images = (<span>byte</span>[])sqlDr[<span>"</span><span>M_QRCode</span><span>"</span><span>];
MemoryStream ms </span>= <span>new</span><span> MemoryStream(images);
Bitmap bmp </span>= <span>new</span><span> Bitmap(ms);
pictureBox1.Image </span>=<span> bmp;
}
}
}</span>
3、根据图片路径显示图片
这个比较简单,直接贴出代码
<span>private</span> <span>void</span> btnLoad_Click(<span>object</span><span> sender, EventArgs e)
{
OpenFileDialog ofd </span>= <span>new</span><span> OpenFileDialog();
ofd.Filter </span>= <span>"</span><span>*jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP</span><span>"</span><span>;
</span><span>if</span> (ofd.ShowDialog() ==<span> DialogResult.OK)
{
pictureBox1.Image </span>=<span> Image.FromFile(ofd.FileName);
}
}</span>
4、打印图片
打印图片是在将图片显示在pictureBox的基础上进行的。
步骤:
1、将printDocument控件拖到界面,添加打印代码
2、设置PrintDocument控件的Print_PrintPage事件
<span>private</span> <span>void</span> btnPrint_Click(<span>object</span><span> sender, EventArgs e)
{
PrintDialog printDialog </span>= <span>new</span><span> PrintDialog();
printDialog.Document </span>= <span>this</span><span>.printDocument1;
</span><span>if</span> (printDialog.ShowDialog() ==<span> DialogResult.OK)
{
</span><span>try</span><span>
{
printDocument1.Print();
}
</span><span>catch</span><span> (Exception ex)
{
printDocument1.PrintController.OnEndPrint(printDocument1, </span><span>new</span><span> System.Drawing.Printing.PrintEventArgs());
}
}
}
</span><span>private</span> <span>void</span> printDocument1_PrintPage(<span>object</span><span> sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(pictureBox1.Image, </span><span>30</span>, <span>30</span><span>);
}</span>
附带着将图片转换成二进制和将二进制转换成图片专门写出来,以便于查看。
<span>public</span> <span>byte</span>[] ConvertBinary(<span>string</span><span> filePath)
{
FileStream fs </span>= <span>new</span> FileStream(filePath, FileMode.Open, FileAccess.Read);<span>//</span><span>以文件流形式读取图片</span>
BinaryReader br = <span>new</span> BinaryReader(fs);<span>//</span><span>转换成二进制流</span>
<span>byte</span>[] imageBytes = br.ReadBytes((<span>int</span>)fs.Length);<span>//</span><span>保存到字节数组中</span>
<span>return</span><span> imageBytes;
}
</span><span>public</span> <span>void</span> ShowImage(<span>byte</span><span>[] imageBytes)
{
MemoryStream ms </span>= <span>new</span><span> MemoryStream(imageBytes);
pictureBox1.Image </span>=<span> Image.FromStream(ms);
}</span>
在pictureBox中显示图片的三种方式:
<span>public</span> <span>void</span><span> Method()
{
MemoryStream ms;
pictureBox1.Image </span>=<span> Image.FromStream(ms);
Bitmap bitmap;
pictureBox1.Image </span>=<span> bitmap;
</span><span>string</span><span> filePath;
pictureBox1.Image </span>=<span> Image.FromFile(filePath);
}</span>
winform中控件combobox控件使用:
<span>public</span> <span>void</span><span> BindCombobox()
{
DataTable dt </span>= <span>new</span><span> DataTable();
dt.Columns.Add(</span><span>new</span> DataColumn(<span>"</span><span>id</span><span>"</span>, <span>typeof</span>(<span>int</span><span>)));
dt.Columns.Add(</span><span>new</span> DataColumn(<span>"</span><span>value</span><span>"</span>, <span>typeof</span>(<span>string</span><span>)));
</span><span>for</span> (<span>int</span> i = <span>0</span>; i < <span>3</span>; i++<span>)
{
DataRow dr </span>=<span> dt.NewRow();
dr[</span><span>"</span><span>id</span><span>"</span>] =<span> i;
dr[</span><span>"</span><span>value</span><span>"</span>] = <span>10</span> +<span> i;
dt.Rows.Add(dr);
}
</span><span>this</span>.comboBox1.DataSource =<span> dt;
</span><span>this</span>.comboBox1.DisplayMember = <span>"</span><span>value</span><span>"</span><span>;
</span><span>this</span>.comboBox1.ValueMember = <span>"</span><span>id</span><span>"</span><span>;
}
</span><span>public</span> <span>void</span><span> ShowValue()
{
</span><span>this</span>.textBox1.Text = <span>this</span><span>.comboBox1.Text;
</span><span>this</span>.textBox2.Text = <span>this</span><span>.comboBox1.SelectedValue.ToString();
}</span>
以上就是一些琐碎的总结,谨作为日后学习工作使用。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号