参考一下:
private void button1_Click(object sender, System.EventArgs e)
{
//存图片
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();
OleDbCommand mycmd=new OleDbCommand("update info set picture=@a",mycnn );
FileStream mystream=new FileStream("f:\\1.jpg",FileMode.Open,FileAccess.Read);
long len=mystream.Length;
mycmd.Parameters.Add("@a",OleDbType.Binary,(int)len,"picture");
mycmd.Parameters["@a"].Direction=System.Data.ParameterDirection.Input;
byte []box=new byte[len];
mystream.Read(box,0,(int)len);
mycmd.Parameters["@a"].Value=box; //更新
mycmd.ExecuteNonQuery();
MessageBox.Show("ok");
mystream.Close();
mycnn.Close();
} private void Form1_Load(object sender, System.EventArgs e)
{
this.pictureBox1.Image=System.Drawing.Image.FromFile("f:\\1.jpg");
} private void button2_Click(object sender, System.EventArgs e)
{//读图片
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();
MessageBox.Show("ok.mycnn.open");
OleDbCommand mycmd=new OleDbCommand("select * from info",mycnn );
OleDbDataReader myrd=mycmd.ExecuteReader();
if(myrd.Read())
{
//读取图片
byte []box=(byte [])myrd["picture"]; //构造流
Stream stream1=new MemoryStream(box);
this.pictureBox2.Image=System.Drawing.Image.FromStream(stream1);
//判断文件是否存在
//if(File.Exists("f:\\lingshi.jpg"))
//{//删除
//File.Delete("f:\\lingshi.jpg"); //}
stream1.Close();
}
mycnn.Close();
}
private void button1_Click(object sender, System.EventArgs e)
{
//存图片
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();
OleDbCommand mycmd=new OleDbCommand("update info set picture=@a",mycnn );
FileStream mystream=new FileStream("f:\\1.jpg",FileMode.Open,FileAccess.Read);
long len=mystream.Length;
mycmd.Parameters.Add("@a",OleDbType.Binary,(int)len,"picture");
mycmd.Parameters["@a"].Direction=System.Data.ParameterDirection.Input;
byte []box=new byte[len];
mystream.Read(box,0,(int)len);
mycmd.Parameters["@a"].Value=box; //更新
mycmd.ExecuteNonQuery();
MessageBox.Show("ok");
mystream.Close();
mycnn.Close();
} private void Form1_Load(object sender, System.EventArgs e)
{
this.pictureBox1.Image=System.Drawing.Image.FromFile("f:\\1.jpg");
} private void button2_Click(object sender, System.EventArgs e)
{//读图片
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();
MessageBox.Show("ok.mycnn.open");
OleDbCommand mycmd=new OleDbCommand("select * from info",mycnn );
OleDbDataReader myrd=mycmd.ExecuteReader();
if(myrd.Read())
{
//读取图片
byte []box=(byte [])myrd["picture"]; //构造流
Stream stream1=new MemoryStream(box);
this.pictureBox2.Image=System.Drawing.Image.FromStream(stream1);
//判断文件是否存在
//if(File.Exists("f:\\lingshi.jpg"))
//{//删除
//File.Delete("f:\\lingshi.jpg"); //}
stream1.Close();
}
mycnn.Close();
}
解决方案 »
- 请教大家关于webBrowser浏览的问题
- C#中如何在winform里怎么用代码创建一个Button
- 请教socket发送大量数据延迟的问题
- winform 调用MySql分页存储过程
- 怎么比较两个字符串显示的时间,当时间相差为30分钟,则进行一定的操作
- 弹出一个多选窗口,并且选择后提交给文本框
- 求助winform
- 有在winform下用过Infragistics的UltraGrid吗,绑定到对象集合的问题要请教
- 我想 再把我对xaml及其相关的一些理解 拿出来讨论下看 是不是差不多
- 如何取得DataGrid中处于编辑状态的单元格的值?
- 非常辣手的问题,有关底层的程序。。。。。。。。。。。:(
- 有C#高手吗?
Dim arrPicture() As Byte = CType(objDS.Tables(0).Rows(RecordNum).Item("image"), Byte())
Dim ms As New MemoryStream(arrPicture)
PictureBox1.Image = Image.FromStream(ms)
存:
System.IO.FileStream Fs = new System.IO.FileStream("d:\\aaa.bmp",System.IO.FileMode.Open);
System.IO.BinaryReader Br = new System.IO.BinaryReader(Fs);
byte[] curImage = Br.ReadBytes((int)Fs.Length);
dazhu2(边城浪子(倚天不出,谁与争锋))
webserv2(GIS)(CAU) 先谢谢你们的热心,但你们好像没有看清我的问题.你们用的方法和仔细看过了,
和我用的方法没有区别!我的问题是,能不能将picturebox的Image直接转换为byte[]呢?或者将byte[]直接转为Image???
{
System.Data.SqlClient.SqlConnection conn=new SqlConnection("server=.;uid=sa;database=myimage");
System.Data.SqlClient.SqlCommand command=new SqlCommand("select * from myimage",conn);
conn.Open();
System.Data.SqlClient.SqlDataReader dr=command.ExecuteReader();
if(dr.Read())
{
FileInfo fi = new FileInfo("xx.txt");
FileStream myStream=fi.Open(FileMode.Create);
byte [] mydata=((byte[])dr["image"]);
foreach(byte a in mydata)
{
myStream.WriteByte(a);
}
myStream.Close();
Image myImage=Image.FromFile("xx.txt");//报错,内存不足
pic1.Image=myImage;
pic1.Refresh();
dr.Close ();
}
conn.Close();
}
而这样写就可以,不懂不懂,请各位兄台多多指教
private void button2_Click(object sender, System.EventArgs e)//从数据库中读取图片
{
System.Data.SqlClient.SqlConnection conn=new SqlConnection("server=.;uid=sa;database=myimage");
System.Data.SqlClient.SqlCommand command=new SqlCommand("select * from myimage",conn);
conn.Open();
System.Data.SqlClient.SqlDataReader dr=command.ExecuteReader();
if(dr.Read())
{
FileInfo fi = new FileInfo("xx.txt");
FileStream myStream=fi.Open(FileMode.Create);
byte [] mydata=((byte[])dr["image"]);
foreach(byte a in mydata)
{
myStream.WriteByte(a);
}
myStream.Close();
string s=null;
System.IO.StreamReader r=new StreamReader(fi.FullName);
s+=r.ReadToEnd();
Image myImage=Image.FromFile(s);
pic1.Image=myImage;
pic1.Refresh();
dr.Close ();
}
conn.Close();
}
Dim sw As New StringWriter
Dim XmlSerializ As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(obj.GetType())
XmlSerializ.Serialize(sw, obj)
Return sw.ToString() End Function序列化回抱错
我用的方法比较麻烦,希望有高手能帮我精简优化一下就感激不尽:
public byte[] ConvertImage(Image image)
{
FileStream fs=new FileStream("imagetemp",FileMode.Create,FileAccess.Write,FileShare.None);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,(object)image);
fs.Close();
fs=new FileStream("imagetemp",FileMode.Open,FileAccess.Read,FileShare.None);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes,0,(int)fs.Length);
fs.Close();
return bytes;
}
FileStream fs=new FileStream("imagetemp",FileMode.Create,FileAccess.Write,FileShare.None);
还是相当于保存了一次临时文件在当然前目录下保存了一个名字为imagetemp的文件 你可以考虑试试内存流!可以的话,我回贴上来
/// <summary>
/// 将byte[]转换为Image
/// </summary>
/// <param name="bytes">字节数组</param>
/// <returns>Image</returns>
public Image ReadImage(byte[] bytes)
{
MemoryStream ms=new MemoryStream(bytes,0,bytes.Length);
BinaryFormatter bf = new BinaryFormatter();
object obj=bf.Deserialize(ms);
ms.Close();
return (Image)obj;
}
/// <summary>
/// 将Image转换为byte[]
/// </summary>
/// <param name="image">Image</param>
/// <returns>byte[]</returns>
public byte[] ConvertImage(Image image)
{
MemoryStream ms=new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms,(object)image);
ms.Close();
return ms.ToArray();
}
Dim img As Image = PictureBox1.Image
Dim img2 As Image = CType(GetObject(ReadObject(img)), Image)
PictureBox2.Image = img2
End Sub Public Shared Function ReadObject(ByVal obj As Object) As Byte()
Dim ms As MemoryStream = New MemoryStream
Dim bf As BinaryFormatter = New BinaryFormatter
bf.Serialize(ms, obj)
ms.Close()
Return ms.ToArray()
End Function Public Shared Function GetObject(ByVal bytes As Byte()) As Object
Dim ms As MemoryStream = New MemoryStream(bytes, 0, bytes.Length)
Dim bf As BinaryFormatter = New BinaryFormatter
Return bf.Deserialize(ms)
End Function