CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何在C#中把数据库里的二进制图片转换成jpg格式

楼主qiuqiu1984()2006-09-04 10:40:41 在 .NET技术 / C# 提问

我做了一个把图片转换成二进制存入oracle数据库的程序,我想把它从数据库里读出来并显示出来,希望是在后台写代码,请高手们帮帮忙! 问题点数:100、回复次数:41Top

1 楼hdt(倦怠)回复于 2006-09-04 10:42:52 得分 10

Image.Save(  
        Stream   stream,  
        ImageFormat   format  
  );Top

2 楼sshmsandy()回复于 2006-09-04 10:48:34 得分 0

upTop

3 楼zhgroup(王员外)回复于 2006-09-04 10:55:48 得分 0

TypeConverter.ConvertFrom    
  public   object   ConvertFrom(  
        object   value  
  );  
  将给定值转换为此转换器的类型。  
  Top

4 楼qiuqiu1984()回复于 2006-09-04 10:56:52 得分 0

是把它转换成Image类型吗Top

5 楼qiuqiu1984()回复于 2006-09-04 10:58:02 得分 0

hdt(倦怠)   你能说清楚点吗,我是新手,谢谢Top

6 楼zpingy(阿平)回复于 2006-09-04 11:03:19 得分 15

void   savejpg(String   NAME)  
  {  
          SqlConnection   CON   =   new   SqlConnection();  
          SqlCommand   CMD   =   new   SqlCommand("SQL");  
   
          FileStream   fs;  
          BinaryWriter   bw;  
   
          int   bufferSize   =   1024;  
          byte[]   outbyte   =   new   byte[bufferSize];  
          long   retval;  
          long   startIndex   =   0;  
   
          CON.Open();  
          SqlDataReader   myReader   =   CMD.ExecuteReader(CommandBehavior.SequentialAccess);  
   
          while   (myReader.Read())  
          {  
                  fs   =   new   FileStream(NAME,   FileMode.OpenOrCreate,   FileAccess.Write);  
                  bw   =   new   BinaryWriter(fs);  
   
                  startIndex   =   0;  
                  retval   =   myReader.GetBytes(0,   startIndex,   outbyte,   0,   bufferSize);  
   
                  while   (retval   >   0)  
                  {  
                          bw.Write(outbyte);  
                          bw.Flush();  
                          startIndex   +=   bufferSize;  
                          retval   =   myReader.GetBytes(0,   startIndex,   outbyte,   0,   bufferSize);  
                  }  
   
                  bw.Write(outbyte);  
                  bw.Flush();  
   
                  bw.Close();  
                  fs.Close();  
          }  
   
          myReader.Close();  
          CON.Close();    
   
  }  
  类似Top

7 楼hdt(倦怠)回复于 2006-09-04 11:03:21 得分 5

从数据读图片代码比较长  
  就不写了  
   
  byte[]   barrImage   =   数据库存图片的二进制字段值  
  MemoryStream   ms   =   new   MemoryStream(   barrImage   );  
  Image   image   =   Image.FormStream(ms);  
  image.Save(   Response.OutputStream   ,   ImageFormat.Jpeg   )  
  Top

8 楼flyfootball()回复于 2006-09-04 11:17:00 得分 0

同意楼上Top

9 楼qiuqiu1984()回复于 2006-09-04 11:20:09 得分 0

Image   的引用为什么总是报错,不是using   System.Drawing.Imaging;吗  
  Top

10 楼qiuqiu1984()回复于 2006-09-04 11:21:46 得分 0

谢谢大家的指点Top

11 楼hdt(倦怠)回复于 2006-09-04 11:21:52 得分 0

 
  命名空间:   System.Drawing  
   
  Top

12 楼qiuqiu1984()回复于 2006-09-04 11:42:33 得分 0

为什么还是报Image是不明确的引用Top

13 楼qiuqiu1984()回复于 2006-09-04 11:50:52 得分 0

c:\inetpub\wwwroot\WebApporacle\WebForm1.aspx.cs(51):   找不到类型或命名空间名称“image”(是否缺少   using   指令或程序集引用?)  
  Top

14 楼qiuqiu1984()回复于 2006-09-04 11:51:17 得分 0

c:\inetpub\wwwroot\WebApporacle\WebForm1.aspx.cs(50):   “Image”是不明确的引用  
  Top

15 楼hdt(倦怠)回复于 2006-09-04 11:53:53 得分 15

考虑是否你的程序里有叫Image的类  
  另用System.Drawing.Image   代替ImageTop

16 楼jackyped(MSN: jpu_jacky@eyou.com)回复于 2006-09-04 12:37:21 得分 0

用System.Drawing.Image   代替Image应该不会再报不明确的引用Top

17 楼xfary(风飘摇)回复于 2006-09-04 13:15:17 得分 0

private   Image   RenderImage(byte[]   byteImg)  
  {  
  System.Drawing.Image   image1   =   System.Drawing.Image.FromStream(new   MemoryStream(byteImg));  
  return   image1;  
  }Top

18 楼qiuqiu1984()回复于 2006-09-04 13:50:44 得分 0

System.Drawing.Image   image   =   System.Drawing.Image.FromStream(ms,true);  
  使用了无效参数。    
  Top

19 楼qiuqiu1984()回复于 2006-09-04 13:52:00 得分 0

大家帮我   看看代码吗  
  public   string   bind()  
  {  
  StringBuilder   sb=new   StringBuilder();  
   
   
  strsql="select   docid,fileid,rowed,filecon   from   docmapfile";  
  OracleDataAdapter   da   =   new   OracleDataAdapter(strsql,conn);  
  da.Fill(ds);  
   
  this.text1.Value=ds.Tables[0].Rows[0].ItemArray[0].ToString();  
  this.text2.Value=ds.Tables[0].Rows[0].ItemArray[1].ToString();  
  this.text3.Value=ds.Tables[0].Rows[0].ItemArray[2].ToString();  
   
  byte[]   barrImage=(byte[])ds.Tables[0].Rows[0].ItemArray[3];  
  MemoryStream   ms   =   new   MemoryStream(barrImage);  
  System.Drawing.Image   image   =   System.Drawing.Image.FromStream(ms,true);  
  image.Save(   Response.OutputStream   ,   ImageFormat.Jpeg   );  
  sb.Append(image.ToString());  
   
  conn.Close();  
   
  return   sb.ToString();  
  }Top

20 楼jedliu(21世纪什么最贵? 人才!)回复于 2006-09-04 14:34:09 得分 0

不错,挺好!Top

21 楼jedliu(21世纪什么最贵? 人才!)回复于 2006-09-04 14:43:58 得分 0

MemoryStream   ms   =   new   MemoryStream(   barrImage   );  
  Image   image   =   Image.FormStream(ms,true);  
  image.Save(   Response.OutputStream   ,ImageFormat.Jpeg   )  
  关键就是这里Top

22 楼qiuqiu1984()回复于 2006-09-04 15:25:29 得分 0

我就是System.Drawing.Image   image   =   System.Drawing.Image.FromStream(ms,true);  
  这里报错,使用了无效参数。Top

23 楼qiuqiu1984()回复于 2006-09-04 15:26:00 得分 0

大家知道我那里写错了吗,请帮帮忙Top

24 楼zhfj001(面包会有的,牛奶也会有的。)回复于 2006-09-04 15:37:00 得分 0

to   我就是System.Drawing.Image   image   =   System.Drawing.Image.FromStream(ms,true);  
  这里报错,使用了无效参数。  
   
  我刚遇到了个类似的错误,请检查一下你的ms是否已经保存了内容.  
  可能是你的ms根本没有取到值.Top

25 楼qiuqiu1984()回复于 2006-09-04 15:52:09 得分 0

我的ms里面有值,我调试看了的,除了这里,那里还有错吗?Top

26 楼interboy(冯东)回复于 2006-09-04 16:30:29 得分 15

插入时把图片数据作为Byte数组插入数据库,下面是把文件转换成数组  
  private   byte[]   ReadImageData(string   strFileName)  
  {  
        byte[]   BlobData   =   null;  
        Bitmap   picture;  
        FileStream   stream;  
        stream   =   new   FileStream(strFileName,FileModel.Open,FileAccess.Read);  
        BlobData   =   new   byte[stream.Length];  
        stream.Read(BlobData,0,(int)stream.Length);  
        picture   =   new   Bitmap(stream);  
        stream.Close();  
        return   BlobData;  
  }  
   
  从数据库中读取图片文件数据转换成byte数组,下面是如何将数组转换为图片  
   
  private   Bitmap   GetBitmap(byte[]   img)  
  {  
        if(img   !=   null)  
        {  
              MemoryStream   ms   =   new   MemoryStream(img,true);  
              ms.Read(img,0,img.Length);  
              Bitmap   bmp   =   new   Bitmap(ms);  
              ms.Close();  
              return   bmp;  
        }  
        else  
              return   null;  
  }  
  Top

27 楼interboy(冯东)回复于 2006-09-04 16:35:45 得分 0

this.oracleConnection1.Open();  
  byte[]   pic   =   (byte[])ocm.ExecuteScalar();//这个命令只返回图象数据  
  this.oracleConnection1.Close();  
  System.IO.MemoryStream   ms   =   new   System.IO.MemoryStream(pic);  
  System.Drawing.Image   img   =   System.Drawing.Image.FromStream(ms);  
  this.pictureBox1.Image   =   img;Top

28 楼zhfj001(面包会有的,牛奶也会有的。)回复于 2006-09-04 17:17:07 得分 5

to   我的ms里面有值,我调试看了的,除了这里,那里还有错吗?  
   
  如果你的ms中有值,就不应该提示这个错误了,  
  它还报什么错?Top

29 楼qiuqiu1984()回复于 2006-09-05 08:42:22 得分 0

我已经找到错误了,我数据库里的值是图片的绝对路径,而不是图片,怎么才能获的图片呢Top

30 楼zhangqing_123()回复于 2006-09-05 08:46:59 得分 10

public   void   bindphoto(string   xh,PictureBox   pictureBox1)  
  {  
  dbcontroller   obj=new   dbcontroller();  
  string   sql="SELECT   *   FROM   photo   WHERE   xh='"   +   xh   +   "'";  
  obj.open();  
  DataSet   myphotods   =   obj.GetDs(sql);  
  obj.close();  
  if   (myphotods.Tables[0].Rows.Count   >   0)  
  {  
  byte[]   bytephoto   =   new   byte[0];  
  bytephoto   =   (byte[])(myphotods.Tables[0].Rows[0]["ZP"]);  
  MemoryStream   stmPhoto   =   new   MemoryStream(bytephoto);  
  pictureBox1.Image   =   Image.FromStream(stmPhoto);  
  }  
  else  
  {  
  pictureBox1.Image   =   null;  
  }  
  }Top

31 楼zhangqing_123()回复于 2006-09-05 08:47:44 得分 0

我这个够详细了吧  
  Top

32 楼zhangqing_123()回复于 2006-09-05 08:48:48 得分 0

一看就会明白了!就是从数据库里读数据,然后显示在图片框里,同时对数据库里有没有图片进行验证一下!Top

33 楼qiuqiu1984()回复于 2006-09-05 08:55:28 得分 0

我的意识是怎么能把路径改为图片,Top

34 楼zhangqing_123()回复于 2006-09-05 08:56:47 得分 0

路径改为图片??说清楚详细一点!!Top

35 楼zhangqing_123()回复于 2006-09-05 08:58:13 得分 0

明白了?上面的没看,呵呵!你可以把绝对路径转成相对路径Top

36 楼itmingong(nous+wisdom+courage)回复于 2006-09-05 09:01:46 得分 0

我也学习一下Top

37 楼qiuqiu1984()回复于 2006-09-05 09:03:18 得分 0

就是我找的到图片的路径,我想把图片转成二进制存入数据库里,但是我现在是把路径转换成二进制存进去的,所有我想通过路径获的图片,把图片存入数据库,Top

38 楼qiuqiu1984()回复于 2006-09-05 09:06:28 得分 0

我是用winform作的图片存入数据库,然后通过web显示出来Top

39 楼zhangqing_123()回复于 2006-09-05 09:07:19 得分 0

是CS模式的,还是BS模式的程序?Top

40 楼zhangqing_123()回复于 2006-09-05 09:11:06 得分 15

哦,这我倒没试过,我这有一个用OPENDIALOG控件(CS模式下)和使用UploadFile控件(BS模式下)的存图片的函数!  
  //=============================================================  
  //   函   数   名:Savephoto  
  //   功能描述:添加或修改照片  
  //   输入参数:学生学号,已经打开文件的openFileDialog  
  //   返   回   值:无  
  //=============================================================  
  public   void   Savephoto(string   xh,OpenFileDialog   openFileDialog1)  
  {  
  //定义byte类型变量  
  byte[]   myblob   =   null;  
  Stream   fs;  
  //给变量blob赋值  
  fs   =openFileDialog1.OpenFile();  
  if(fs!=null)  
  {  
  openFileDialog1.Reset();  
  myblob   =   new   byte[fs.Length];  
  fs.Read(myblob,0,int.Parse(myblob.Length.ToString()));  
  fs.Close();  
  OracleDataAdapter   myoda;  
  OracleCommand   cmd;  
  DataSet   myds   =   new   DataSet();  
  DataTable   mydt   =   new   DataTable();  
  DataRow   mydr;  
  string   connstr="User   ID=student;Data   Source=hres;Password=studentmanage";  
  OracleConnection   conn=   new   OracleConnection(connstr);  
  string   selesql;  
  selesql   =   "SELECT   *   FROM   photo   WHERE   xh='"   +   xh   +   "'";  
  cmd   =   new   OracleCommand(selesql,conn);  
  myoda   =   new   OracleDataAdapter(selesql,conn);  
  myoda.SelectCommand   =   cmd;  
  myoda.Fill(myds,   "PHOTO");  
  string   info   =   "";  
  if   (myds.Tables[0].Rows.Count   >   0)//修改照片  
  {  
  info   =   "修改照片成功";  
  string   updatesql   =   "UPDATE   photo   SET   zp=:vPHOTO   WHERE   xh='"   +   xh   +   "'";  
  OracleCommand   updatecmd   =   new   OracleCommand(updatesql,conn);  
  myoda.UpdateCommand   =   updatecmd;  
  myoda.UpdateCommand.Parameters.Add(":vPHOTO",   OracleType.Blob,   myblob.Length,   "ZP");  
   
  myoda.MissingSchemaAction   =   MissingSchemaAction.AddWithKey;  
  myoda.FillSchema(myds,   SchemaType.Source,   "PHOTO");  
  myoda.Fill(myds,   "PHOTO");  
   
  mydt   =   myds.Tables[0];  
  mydr   =   mydt.Rows[0];  
  string   a   =   mydr["XH"].ToString();  
   
  mydr.BeginEdit();  
  mydr["XH"]   =   xh;  
  mydr["ZP"]   =   myblob;  
  mydr.EndEdit();  
  myoda.Update(myds,   "PHOTO");  
  }  
  else//上传新照片  
  {  
  info   =   "上传新照片成功";  
  string   insertsql   =   "INSERT   INTO   photo   (xh,zp)   VALUES   ('"   +   xh   +   "',:vPHOTO)";  
  OracleCommand   insertcmd   =   new   OracleCommand(insertsql,conn);  
  myoda.InsertCommand   =   insertcmd;  
  myoda.InsertCommand.Parameters.Add(":vPHOTO",   OracleType.Blob,   myblob.Length,   "ZP");  
   
  myoda.MissingSchemaAction   =   MissingSchemaAction.AddWithKey;  
  myoda.FillSchema(myds,   SchemaType.Source,   "PHOTO");  
  myoda.Fill(myds,   "PHOTO");  
   
  mydt   =   myds.Tables[0];  
  mydr   =   mydt.NewRow();  
   
  mydr.BeginEdit();  
  mydr["XH"]   =   xh;  
  mydr["ZP"]   =   myblob;  
  mydr.EndEdit();  
  mydt.Rows.Add(mydr);  
  myoda.Update(myds,   "PHOTO");  
  }  
  MessageBox.Show(info);  
  }  
  }Top

41 楼zhangqing_123()回复于 2006-09-05 09:11:34 得分 10

///   上传图片  
  private   void   SavePhoto(string   xh)  
  {  
  if(IsAllowedExtension(UploadFile))  
  {    
  //如果是修改图片,则将修改前图片删掉  
  string[]   arrExtension   =   {".gif",".jpg",".jpeg",".bmp",".png"};  
  string   path1="";  
  //判断该扩展名是否合法  
  for(int   i   =   0;   i<   arrExtension.Length;   i++)  
  {  
  string   fileName1=TextBox_xh.Text;  
  path1=Server.MapPath(".")   +   @"\Photo\"   +fileName1+arrExtension[i];  
  if(File.Exists(path1))  
  {  
  FileInfo   delete=new   FileInfo(path1);  
  delete.Delete();  
  break;  
  }  
  }  
  //上传图片  
  string   extension   =   Path.GetExtension(UploadFile.PostedFile.FileName).ToLower();  
   
  // string   extension=".jpg";  
  string   fileName=TextBox_xh.Text;  
  string   path   =   Server.MapPath(".")   +   @"\Photo\"   +   fileName   +   extension;  
  //保存图片到服务器目录下  
  UploadFile.PostedFile.SaveAs(path);  
  //得到图片的二进制形式  
  HttpPostedFile   upFile=UploadFile.PostedFile;  
  //得到上传文件的长度;  
  int   upFileLength=upFile.ContentLength;  
  string   ContentType=upFile.ContentType;  
  byte[]   bPicture;  
  bPicture=new   byte[upFileLength];  
  Stream   filestream=upFile.InputStream   ;  
  filestream.Read   (bPicture,0,upFileLength);  
  filestream.Close   ();  
  OracleDataAdapter   myoda;  
  DataSet   myds   =   new   DataSet();  
  System.Data.DataTable     mydt   =   new   System.Data.DataTable();  
  DataRow   mydr;  
  OracleCommand   cmd;  
  string   connstr="User   ID=student;Data   Source=hers;Password=studentmanage";  
  OracleConnection   conn=   new   OracleConnection(connstr);  
  string   selesql   =   "SELECT   *   FROM   photo   WHERE   xh='"   +   xh   +   "'";  
  cmd   =   new   OracleCommand(selesql,conn);  
  myoda   =   new   OracleDataAdapter(selesql,conn);  
  myoda.SelectCommand   =   cmd;  
  myoda.Fill(myds,   "PHOTO");  
  string   insertsql   =   "INSERT   INTO   photo   (xh,zp)   VALUES   ('"   +   xh   +   "',:vPHOTO)";  
  string   updatesql   =   "UPDATE   photo   SET   zp=:vPHOTO   WHERE   xh='"   +   xh   +   "'";  
  try    
  {  
  if(myds.Tables[0].Rows.Count   >   0)  
  {  
  OracleCommand   updatecmd   =   new   OracleCommand(updatesql,conn);  
  myoda.UpdateCommand   =   updatecmd;  
  myoda.UpdateCommand.Parameters.Add(":vPHOTO",   OracleType.Blob,   bPicture.Length,   "ZP");  
  myoda.MissingSchemaAction   =   MissingSchemaAction.AddWithKey;  
  myoda.FillSchema(myds,   SchemaType.Source,   "PHOTO");  
  myoda.Fill(myds,   "PHOTO");  
  mydt   =   myds.Tables[0];  
  mydr   =   mydt.Rows[0];  
  string   a   =   mydr["XH"].ToString();  
  mydr.BeginEdit();  
  mydr["XH"]   =   xh;  
  mydr["ZP"]   =   bPicture;  
  mydr.EndEdit();  
  myoda.Update(myds,   "PHOTO");  
  pictureBox1.ImageUrl=path;  
  }  
  else  
  {  
  OracleCommand   insertcmd   =   new   OracleCommand(insertsql,   conn);  
  myoda.InsertCommand   =   insertcmd;  
  myoda.InsertCommand.Parameters.Add(":vPHOTO",   OracleType.Blob,bPicture.Length,   "ZP");  
  myoda.MissingSchemaAction   =   MissingSchemaAction.AddWithKey;  
  myoda.FillSchema(myds,   SchemaType.Source,   "PHOTO");  
  myoda.Fill(myds,   "PHOTO");  
  mydt   =   myds.Tables[0];  
  mydr   =   mydt.NewRow();  
  mydr.BeginEdit();  
  mydr["XH"]   =   xh;  
  mydr["ZP"]   =   bPicture   ;  
  mydr.EndEdit();  
  mydt.Rows.Add(mydr);  
  myoda.Update(myds,   "PHOTO");  
  pictureBox1.ImageUrl=path;  
  }  
  }  
  catch  
  {  
  throw;  
  }  
  }  
  }Top

相关问题

关键词

得分解答快速导航

  • 帖主:qiuqiu1984
  • hdt
  • zpingy
  • hdt
  • hdt
  • interboy
  • zhfj001
  • zhangqing_123
  • zhangqing_123
  • zhangqing_123

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo