如何将图片转换为二进制流发送出去在客户端里的RICHTEXTBOX显示?

问题描述

最近做了一个聊天软件希望把图片通过二进制流的形式发送给客户端实现客户端能看到我发送的图片如何显示,我做的聊天软件本身作为服务器也是客户端的:下面是我的代码privateThreadtd;privateTcpListenertcpListener;privatestaticstringmessage="";privatevoidrtbContent_TextChanged(objectsender,EventArgse){}privatevoidF_Chat_Load(objectsender,EventArgse){td=newThread(newThreadStart(this.StartListen));td.Start();timer1.Start();this.toolStripStatusLabel3.Text="系统当前时间:"+DateTime.Now.ToString("yyyy-MM-ddhh:mm:ss");this.timer1.Interval=1000;this.timer1.Start();}privatevoidbutton3_Click(objectsender,EventArgse){Application.Exit();}privatevoidbutton2_Click(objectsender,EventArgse){try{IPAddress[]ip=Dns.GetHostAddresses(Dns.GetHostName());stringstrmsg=""+txtName.Text+"("+ip[0].ToString()+")"+DateTime.Now.ToLongTimeString()+"n"+""+this.rtbSend.Text+"n";TcpClientclient=newTcpClient(txtIP.Text,888);NetworkStreamnetstream=client.GetStream();StreamWriterwstream=newStreamWriter(netstream,Encoding.Default);wstream.Write(strmsg);wstream.Flush();wstream.Close();client.Close();rtbContent.SelectionColor=colorDialog1.Color;rtbContent.SelectionFont=fontDialog1.Font;rtbContent.AppendText(strmsg);rtbContent.ScrollToCaret();rtbSend.Clear();}catch(Exceptionex){MessageBox.Show(ex.Message);}}privatevoidStartListen(){message="";tcpListener=newTcpListener(888);tcpListener.Start();while(true){TcpClienttclient=tcpListener.AcceptTcpClient();//接受连接请求NetworkStreamnstream=tclient.GetStream();//获取数据流byte[]mbyte=newbyte[1024];//建立缓存inti=nstream.Read(mbyte,0,mbyte.Length);//将数据流写入缓存message=Encoding.Default.GetString(mbyte,0,i);}}privatevoidbutton1_Click(objectsender,EventArgse){rtbContent.Clear();}privatevoidF_Chat_FormClosed(objectsender,FormClosedEventArgse){if(this.tcpListener!=null){tcpListener.Stop();}if(td!=null){if(td.ThreadState==ThreadState.Running){td.Abort();}}}这一段是我的实现在RICHTEXXBOX里显示图片privatevoid插入图片ToolStripMenuItem_Click(objectsender,EventArgse){openFileDialog1.Filter="图片文件|*.jpg|所有文件|*.*";if(openFileDialog1.ShowDialog()==DialogResult.OK){Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName),false);rtbSend.Paste();}}我想请教各位大虾如何把我打开的图片转换为二进制流发送到客户端的RICHTEXTBOX然后再解出来显示图片呢

解决方案

解决方案二:
客户端将接收到的二进制数据写成image文件,调用Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName),false);rtbSend.Paste();
解决方案三:
关键我还没有把我的图片转换为二进制流,大虾如何把我打开的图片转换为二进制流的?
解决方案四:
Image的Save方法就可以存到流中啊,看帮助
解决方案五:
我自己项目中用到得方法A页面protectedvoidPage_Load(objectsender,EventArgse){Response.Write(ShowImage(@photo));//@photo服务器绝对路径如D:/ABC/A.jpg}privatestringShowImage(stringfilePath){string[]Files=System.IO.Directory.GetFiles(filePath);System.Text.StringBuildersb=newSystem.Text.StringBuilder();Stringp="";inti=0;foreach(stringfileinFiles){System.IO.FileInfofi=newSystem.IO.FileInfo(file);p+="<li><ahref='#'target='_blank'><imgid='ManImage'src='Image.aspx?path="+fi.FullName+"'runat='server'/></a></li>";i++;}returnp.ToString();}

Image画面protectedvoidPage_Load(objectsender,EventArgse){Response.BinaryWrite(this.GetImage(Request.QueryString["path"]));}privatebyte[]GetImage(stringpath){//文件异步读取(文件路径,打开文件,控制对文件的读取方式)using(System.IO.FileStreamfs=newSystem.IO.FileStream(path,System.IO.FileMode.Open,System.IO.FileAccess.Read)){//将基元数据类型读作二进制值using(System.IO.BinaryReaderreader=newSystem.IO.BinaryReader(fs)){returnreader.ReadBytes((int)fs.Length);reader.Close();//关闭流}fs.Close();}}

这样就OK了
解决方案六:
楼上的可以试试
解决方案七:
byte[]data=(byte[])ds.Tables[0].Rows[0]["IMAGE_DATA"];Streamms=newMemoryStream(data);Imageimage=System.Drawing.Image.FromStream(ms);
解决方案八:
protectedstringImgToBase64String(stringImagefilename){try{Bitmapbmp=newBitmap(Imagefilename);MemoryStreamms=newMemoryStream();bmp.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);byte[]arr=newbyte[ms.Length];ms.Position=0;ms.Read(arr,0,(int)ms.Length);ms.Close();returnConvert.ToBase64String(arr);}catch(Exceptionex){returnnull;}}//base64编码的字符串转为图片protectedBitmapBase64StringToImage(stringstrbase64){try{byte[]arr=Convert.FromBase64String(strbase64);MemoryStreamms=newMemoryStream(arr);Bitmapbmp=newBitmap(ms);//bmp.Save("test.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);//bmp.Save("test.bmp",ImageFormat.Bmp);//bmp.Save("test.gif",ImageFormat.Gif);//bmp.Save("test.png",ImageFormat.Png);ms.Close();returnbmp;}catch(Exceptionex){returnnull;}}
解决方案九:

//将RichTextBox的内容直接写入数据库:privatevoidbutton1_Click(objectsender,EventArgse)...{System.IO.MemoryStreammstream=newSystem.IO.MemoryStream();this.richTextBox1.SaveFile(mstream,RichTextBoxStreamType.RichText);//将流转换成数组byte[]bWrite=mstream.ToArray();//将数组写入数据库System.Data.SqlClient.SqlParameter[]pram=...{sqlHelper.MakeInParam("@XX",System.Data.SqlDbType.Image)};pram[0].Value=bWrite;sqlHelper.RunSql("insertintoXXX(XX)values(@XX)",pram);}//将数据库中的RTF读出并填充到RichTextBoxprivatevoidbutton2_Click(objectsender,EventArgse)...{//从数据库中读出数据DataTabledt=sqlHelper.GetDataTable("selectXXfromXXXwhere.....");byte[]bWrite=(byte[])dt.Rows[0][0];//将数组转换成streamSystem.IO.MemoryStreammstream=newSystem.IO.MemoryStream(bWrite,false);//将stream填充到RichTextBoxthis.richTextBox1.LoadFile(mstream,RichTextBoxStreamType.RichText);}
解决方案十:
//将RichTextBox的内容直接写入数据库:privatevoidbutton1_Click(objectsender,EventArgse)...{System.IO.MemoryStreammstream=newSystem.IO.MemoryStream();this.richTextBox1.SaveFile(mstream,RichTextBoxStreamType.RichText);//将流转换成数组byte[]bWrite=mstream.ToArray();//将数组写入数据库System.Data.SqlClient.SqlParameter[]pram=...{sqlHelper.MakeInParam("@XX",System.Data.SqlDbType.Image)};pram[0].Value=bWrite;sqlHelper.RunSql("insertintoXXX(XX)values(@XX)",pram);}//将数据库中的RTF读出并填充到RichTextBoxprivatevoidbutton2_Click(objectsender,EventArgse)...{//从数据库中读出数据DataTabledt=sqlHelper.GetDataTable("selectXXfromXXXwhere.....");byte[]bWrite=(byte[])dt.Rows[0][0];//将数组转换成streamSystem.IO.MemoryStreammstream=newSystem.IO.MemoryStream(bWrite,false);//将stream填充到RichTextBoxthis.richTextBox1.LoadFile(mstream,RichTextBoxStreamType.RichText);}

来自http://blog.csdn.net/leomaya/article/details/1608701,以方便大家,我找了两个小时才找到.

时间: 2024-10-22 07:30:31

如何将图片转换为二进制流发送出去在客户端里的RICHTEXTBOX显示?的相关文章

图片以二进制流输出到网页

二进制|网页 using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using

asp.net实现图片以二进制流输出的两种方法_实用技巧

本文实例讲述了asp.net实现图片以二进制流输出的两种方法.分享给大家供大家参考,具体如下: 方法一: System.IO.MemoryStream ms = new System.IO.MemoryStream(); System.IO.Stream str = new FileUpload().PostedFile.InputStream; System.Drawing.Bitmap map = new System.Drawing.Bitmap(str); map.Save(ms, Sy

Image显示服务器上任意绝对路径下的图片(采用二进制流实现)_实用技巧

我要实现这样一个需求:数据库中存储的是照片所在的绝对路径(可以不在系统所在路径下),Image控件动态加载路径下的图片. 看到这个题目,有些人会说,这还不简单啊,将URL直接设置成绝对路径不就行了啊.我只能说,如果你这样说,那么只能说明你没有经过思考,甚至于,还没有搞清楚Web开发中前台代码和后台代码到底是什么意思,但是这种做法,在自己做的时候(未架到IIS),搜狗浏览器是可以显示图片的(仅此一款可以显示,所以这种做法没有意义). Image控件是在System.Web.UI.WebContro

服务器那边没数据-iOS 图片上传,服务器那边收不到数据,显示字节数为0

问题描述 iOS 图片上传,服务器那边收不到数据,显示字节数为0 /** 上传头像 接口说明 此接接口以POST方式请求. 请求说明http://124.207.188.52/firmail/app/imgupload/upload?uid=111&file=图片二进制流 参数说明 uid 用户id file 图片的二进制流 */ (void)asiUploadIcon { NSURL *url = [NSURL URLWithString:@"http://124.207.188.52

cxf +restful项目,实现一个以图片二进制流做参数的接口,接口和客户端怎么写?

问题描述 cxf +restful项目,实现一个以图片二进制流做参数的接口,接口和客户端怎么写? 以图片路径为参数的接口: @GET @Path("/vcardBean/{path}") @Produces({"application/json","application/xml"}) public VCardBean getVCardBean(@PathParam("path") String path) { //path

怎么样把从数据库里读出来的图片二进制流,放到image里显示?

问题描述 winform项目怎么样把从数据库里读出来的图片二进制流,放到image里显示? 解决方案 解决方案二:各位大虾救命啊解决方案三:System.Drawing.Imageimage=newSystem.Drawing.Bitmap(流,true);就可以阿.解决方案四:byte[]bts=this.getdbBytes();MemoryStreamms=newMemoryStream(bts);Imageimg=Image.FromStream(ms); 解决方案五:那怎么从数据库里读

js 显示base64编码的二进制流网页图片_javascript技巧

Data URI scheme. Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张2*2的白色gif图片. 在上面的Data URI中,data表示取得数据的协定名称,image/gif是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/gif文件base64编码后的数据. 目前,Data URI sc

activexobject-ActiveXObject获取上传文件的二进制流

问题描述 ActiveXObject获取上传文件的二进制流 支持W3C File的浏览器,都可以使用FileReader对象获取上传文件的二进制流. 但是IE不支持,IE11都不支持. @showbo 感谢大虾帮我解决了问题.但是IE是个头疼的问题. 再次请教各位大虾,有什么能让IE获取上传文件二进制流的方法么? 不能使用flash,因为面向的用户特殊,他们基本不会电脑,更别说安装flash. IE获取不到ActiveXObject对象,我可以写bat文件,让用户下载后执行bat后再进行上传文件

Ajax请求二进制流进行处理(ajax异步下载文件)的简单方法

摘要: ajax请求一个二进制流(文件),转换为Blob进行处理或者下载保存文件 需求 管理后台需要随时下载数据报表,数据要实时生成后转换为excel下载. 文件不大,页面放置"导出"按钮,点击按钮后弹出保存文件对话框保存 说明:第一种方法使用a标签直接可以满足大部分人需求,第二种方法纯粹是在说实现方法以及更好的操作体验,不需要(举一个需要第二种方法的例子:如果生成很慢就需要生成过程中禁用按钮,防止连续生成)用到的可以不用看 解决方案 方法一 请求文件的接口能改为GET则可以使用这种方