web-dev-qa-db-ja.com

バイト配列からのasp.net表示イメージ

バイト配列があり、そこから画像を表示しようとしています。

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参照を追加しても何も変更されなかったようです。何か不足していますか?ところで、データベースからバイト配列を正しく取得していると確信しています。

7
Koray Durudogan

これを行う別の方法は、次のように、バイト配列をbase 64文字列に変換し、それをImageUrlrImageプロパティに割り当てることです。

rImage.ImageUrl = "data:image;base64," + Convert.ToBase64String(arr);

中間MemoryStreamや個別のページは必要ありません...バイト配列がブラウザがサポートする画像形式の場合、表示されます。幸運を。

29
John Riehl
<img id="img" runat="server" alt=""/>

コードビハインド

string base64String = Convert.ToBase64String(arr, 0, arr.Length);
img.Src = "data:image/jpg;base64," + base64String;

MemoryStreamは必要ありません。

6
Sami

あなたはおそらくSystem.Drawing.Imageを考えているでしょう。そのクラスはFromStreamをサポートします。

このフォーラムの投稿 は、WebFormsに動的画像をロードするいくつかの方法を示しています。

おそらく最も簡単な方法は、ここで行っているように画像を読み込む別のaspxページを作成し、Response.BinaryWriteを使用してそれを応答ストリームに保存し、次に作業中のページでImageを作成することです。新しいaspxページを画像URLとして使用するコントロール。もちろん、さまざまな画像をロードする必要がある場合は、クエリ文字列パラメータを使用できます。

1
ekolis