イメージコントロールに直接画像を表示します(画像はbyte[]形式です)

6474 ワード

仕事の過程でこの問題に出会って、ネット上でいくつかの資料を調べて、自分の解決方法と解決過程を結びつけてまとめて、方面は後で調べます.同じ問題に遭遇したあなたのお役に立てたら嬉しいですよ~~
なぜならasp.NetのImageコントロールはSystemです.Web.UI.WebControlsネーミングスペースにあるのでwinformのようにbyte[]で直接画像を表示することはできません.こうなった上は、曲線で国を救うしかない.ここの例は、showImage.aspxは最終的に文字と画像を表示するためのページであるが、私たちの画像は曲線救国が必要であるため、ここでは別のpicを構築する.aspx.picでaspxページに画像を表示し、showImageを表示します.aspxにおけるImageコントロールのurlをpicとする.aspx.最終的に私たちは要求を完成しました.
 
showImage.aspxのコードは以下の通りです.
<td height="25" align="right">  :   </td>

<td>

       <asp:Image ID="Image1" runat="server" Width="80" Height="80"/>

</td>

 
showImage.aspx.csのコードは以下の通りです.
private string tid = null;

    protected void Page_Load(object sender, EventArgs e)

    {

        tid = Request.Params["tid"];

        this.Image1.ImageUrl = "../show/pic.aspx?tid=" + tid;  

    }

 
pic.aspx.csのコードは以下の通りです.
protected void Page_Load(object sender, EventArgs e)

    {

        string tid = Request.Params["tid"].ToString();

        Response.BinaryWrite(getImage(id));//getImage(id)     byte[]  ,     byte[]

    }

 
cgiを呼び出してピクチャデータを返す場合は、byte[]に結果を変換する必要があります.
string cgi = "http://……………………/img_loader.cgi?img=EF6BF9DD6CBB46E6B0524487B1EE5DBA.jpg";

  System.Net.HttpWebRequest webrequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(cgi);

  System.Net.HttpWebResponse webresponse = (System.Net.HttpWebResponse)webrequest.GetResponse();

  byte[] b = null;

  using (Stream stream = webresponse.GetResponseStream())

  using (MemoryStream ms = new MemoryStream())

  {

        int count = 0;

        do

        {

        byte[] buf = new byte[1024];

        count = stream.Read(buf, 0, 1024);

        ms.Write(buf, 0, count);

        } while (stream.CanRead && count > 0);

        b = ms.ToArray();

        }

    webresponse.Close();

    Response.BinaryWrite(b);

ネット上の多くはこのように処理されていますが、ネットがどれだけの長さのstreamを送ってくるか分からないので、間違って報告されます.
byte[] b=new byte[stream.length];

stream.Read(b,0,b.length);

stream.Seek(0,SeekOrigin.Begin);

 
ローカルの1枚の画像でテストする場合は、この方法で画像のbyte[]データを取得できます.
FileStream files = new FileStream("D:/full.png", FileMode.Open);

byte[] imgByte = new byte[files.Length];

files.Read(imgByte, 0, imgByte.Length);

files.Close();