我想把网络上的图片读进一个字符数组中,该如何写这个方法?

解决方案 »

  1.   

    这个所谓的"网络上的图片"你有他的访问路径么?比如WWW.XXX.XX.BMP
      

  2.   

    如果没有的话,我觉得只有GOD才知道怎么读了
      

  3.   

    读网络上的图片,当然只能用图片的网络地址访问了,我做了一个,但是和从本地的读的结果却 不一样
     <%@ Page language="c#"  ContentType="text/html" ResponseEncoding="utf-8" %>
     <%@ Import Namespace = "System.IO" %>
    <%@ Import Namespace = "System.Text" %>
    <%@ Import Namespace = "System.Net" %>
    <%
      String   WebAddress =@"http://news2.3g.net.cn/upload/2007/8/7/721436796a.jpg";   
      WebRequest request  = WebRequest.Create(WebAddress);     
      WebResponse  response   =   request.GetResponse();   
      Stream   responseStream   =   response.GetResponseStream();   
      StreamReader   reader   =   new   StreamReader(responseStream,Encoding.ASCII);   
      string   content   =   reader.ReadToEnd(); 
      Encoding enc = Encoding.UTF8;
      byte[] picbyte= enc.GetBytes(content);
        
      Response.Write(content+"<br/>");
      Response.Write("网络内容: ");
      for(int i=0;i<picbyte.Length;i++)
        {
        Response.Write(picbyte[i]);    
        }  Response.Write("<br/> ");%>
    <%
       FileStream fs=null;
       byte[] bytes;
       string path="";
       path=@"F:/test/721436796a.jpg";
       fs = File.Open(path, FileMode.Open);
       bytes=new byte[fs.Length];
       fs.Read(bytes,0,(int)fs.Length);
       fs.Close ();
       Response.Write("本地内容:");
        for(int i=0;i<bytes.Length;i++)
        //Response.Write(IPAddress.HostToNetworkOrder(bytes[i]));
        Response.Write(bytes[i]);
    %>
      

  4.   

    这里读取内容应该直接使用BinaryReader。StreamReader的ReadToEnd方法在读取Stream时会根据Enconding转化为String,但是你的图片数据并不是字符串,转出来的东西已经是错误的了,当然不是你要的。你再使用Encoding的GetBytes方法只不过是将string转换为字节。StreamReader的ReadToEnd和Encoding的GetBytes,这两个操作并不是对应的逆操作。
      

  5.   

    Encoding.ASCII编码过的再用Encoding.UTF8读明显就不对。要用Encoding.Convert()转换编码还有为什么要用StreamReader ,图片不是二进制的吗?BinaryReader
      

  6.   

    String   WebAddress =@"http://news2.3g.net.cn/upload/2007/8/7/721436796a.jpg";   
      WebRequest request  = WebRequest.Create(WebAddress);     
      WebResponse  response   =   request.GetResponse();   
      Stream   responseStream   =   response.GetResponseStream();
    // 到这里都没有错,这里的Stream responseStream已经是字节流了。
    // 接下来要放到Response里面
    int buffersize = 1024;
    byte[] buffer = new byte[buffersize];
    int count = responseStream.Read(buffer, 0, buffersize);
    while (count>0)
    {
    Response.OutputStream.Write(buffer, 0, count);
    count = responseStream.Read(buffer, 0, buffersize);
    }
    }
      

  7.   

    有一点点补充Response.ContentType = "image/jpeg";
    Response.Cache.SetCacheability(HttpCacheability.Public);
    while (count>0)
    {
    ...
    }
      

  8.   

    谢谢大家,这个问题我也有一个方法了
     String   WebAddress =@"http://news2.3g.net.cn/upload/2007/8/7/721436796a.jpg";  
     WebRequest webRequest = WebRequest.Create(WebAddress);
     WebResponse webResponse = webRequest.GetResponse();
     Stream stream = webResponse.GetResponseStream();
     MemoryStream mem = new MemoryStream();
     BufferedStream bfs = new BufferedStream(stream);
     int len=0;
     byte[] buffer = new byte[4096];
      do
        {
          len = bfs.Read(buffer, 0, buffer.Length);
          if (len > 0)
          mem.Write(buffer, 0, len);
        }
      while (len > 0);
      bfs.Close();
      byte[] picbytes = mem.ToArray();
      mem.Close();   Response.Write("网络内容: ");
      for(int i=0;i<picbytes.Length;i++)
        {
        Response.Write(picbytes[i]);    
        }  Response.Write("<br/> ");