イメージコントロールに直接画像を表示します(画像は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のコードは以下の通りです.
showImage.aspx.csのコードは以下の通りです.
pic.aspx.csのコードは以下の通りです.
cgiを呼び出してピクチャデータを返す場合は、byte[]に結果を変換する必要があります.
ネット上の多くはこのように処理されていますが、ネットがどれだけの長さのstreamを送ってくるか分からないので、間違って報告されます.
ローカルの1枚の画像でテストする場合は、この方法で画像のbyte[]データを取得できます.
なぜなら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();