バイト配列があり、そこから画像を表示しようとしています。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Linq;
namespace RealPortableTerminal
{
public partial class resim : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PortableTerminalDbEntities entity = new PortableTerminalDbEntities();
byte[] arr = (from b in entity.Sicil where b.Id == 31 select b.Fotograf).First();
Image rImage = null;
using (MemoryStream ms = new MemoryStream(arr))
{
rImage = Image.FromStream(ms);
}
}
}
}
FromStreamに下線が引かれ、「System.Web.UI.WebControls.Image」には「FromStream」の定義が含まれていないと表示されます。 System.Data.Linq参照を追加しても何も変更されなかったようです。何か不足していますか?ところで、データベースからバイト配列を正しく取得していると確信しています。
これを行う別の方法は、次のように、バイト配列をbase 64文字列に変換し、それをImageUrl
のrImage
プロパティに割り当てることです。
rImage.ImageUrl = "data:image;base64," + Convert.ToBase64String(arr);
中間MemoryStream
や個別のページは必要ありません...バイト配列がブラウザがサポートする画像形式の場合、表示されます。幸運を。
<img id="img" runat="server" alt=""/>
コードビハインド
string base64String = Convert.ToBase64String(arr, 0, arr.Length);
img.Src = "data:image/jpg;base64," + base64String;
MemoryStream
は必要ありません。
あなたはおそらくSystem.Drawing.Image
を考えているでしょう。そのクラスはFromStream
をサポートします。
このフォーラムの投稿 は、WebFormsに動的画像をロードするいくつかの方法を示しています。
おそらく最も簡単な方法は、ここで行っているように画像を読み込む別のaspxページを作成し、Response.BinaryWrite
を使用してそれを応答ストリームに保存し、次に作業中のページでImage
を作成することです。新しいaspxページを画像URLとして使用するコントロール。もちろん、さまざまな画像をロードする必要がある場合は、クエリ文字列パラメータを使用できます。