web-dev-qa-db-ja.com

ASP.NETでバイナリデータからイメージコントロールに変換する

データベースに画像のバイナリデータがあり、ASP.NETの画像コントロールに表示したい。どうやって?それが不可能な場合は、データベースに保存してイメージコントロールに表示する別の方法を見つけてください。

14
kartal

次のように通常のHTML img要素を作成します。

<img runat="server" id="image" />

そして コードビハインド でこれを行います:

image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes);

ここで、imageBytesはbyte[]

完了です。画像が表示されます。

32
Icarus

ほとんどの場合、画像はデータベースにバイト配列として保存されています。もしそうなら、あなたはこれを使うことができます:

public static System.Drawing.Image ByteArrayToImage(byte[] bArray)
{
    if (bArray == null)
        return null;

    System.Drawing.Image newImage;

    try
    {
        using (MemoryStream ms = new MemoryStream(bArray, 0, bArray.Length))
        {
            ms.Write(bArray, 0, bArray.Length);
            newImage = System.Drawing.Image.FromStream(ms, true);
        }
    }
    catch (Exception ex)
    {
        newImage = null;

        //Log an error here
    }

    return newImage;
}
5
Jon Raynor
protected void Button2_Click(object sender, EventArgs e)
{
    Byte[] ar = Ret_image(Convert.ToInt32(TextBox2.Text));
    String st = Server.MapPath("abc.jpg");
    FileStream fs = new FileStream(st, FileMode.Create, FileAccess.Write);
    fs.Write(ar, 0, ar.Length);
    fs.Close();
    Image1.ImageUrl = "abc.jpg";           
}

このイベントをボタンのクリックに使用して画像を取得し、ここでRet_Imageメソッドを呼び出します。

1
mohit arora

汎用ハンドラー(.ashx)の場合:

  public class ImageHandler : IHttpHandler
        {

            public void ProcessRequest(HttpContext context)
            {

                    if(!string.IsNullOrEmpty(context.Request.QueryString["ImageId"])){
                    try
                    {
                        string ImageId = context.Request.QueryString["ImageId"].ToString(); 
                        ImageDataModel idm = new ImageDataModel();
                        byte[] ImageData = idm.getImageData(ImageId);

                        context.Response.ContentType = "image/JPEG";
                        context.Response.OutputStream.Write(ImageData, 0, ImageData.Length); 


                    }
1
marko
public Byte[] Ret_image(Int32 id)
{
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "select * from tbimage where imageid=@id";
    cmd.Connection = con;
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
    SqlDataReader dr = cmd.ExecuteReader();
    dr.Read();
    Byte[] ar = (Byte[])(dr[1]);
    dr.Close();
    cmd.Dispose();
    return ar;
}
1
mohit arora
SqlConnection con = new SqlConnection();
string _path;
Using SYstem.IO;
Using System.Data.SQLClient;

//convert Image to binary and save in DB

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        _path = openFileDialog1.FileName;
        InsertInSQL(_path);
    }
}

private void InsertInSQL(string _path)
{
    con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS;
    string strQ = "insert into dbo.PicTBL(Pic)values(@p)";
    SqlCommand command = new SqlCommand(strQ,con);
    command.Parameters.AddWithValue("@p",ImageToBinary(_path));
    con.Open();
    command.ExecuteNonQuery();
    con.Close();
}      

public static byte[] ImageToBinary(string _path)
{
    FileStream fS = new FileStream(_path, FileMode.Open, FileAccess.Read);
    byte[] b = new byte[fS.Length];
    fS.Read(b, 0, (int)fS.Length);
    fS.Close();
    return b;
}

//Convert Binary to imge and save in a folder
private void button1_Click_1(object sender, EventArgs e)
{
    DataTable dt = Rimage();
    foreach (DataRow row in dt.Rows)
    {
        byte[] b = (byte[])row["Pic"];
        Image img = BinaryToImage(b);
        img.Save("D:\\NewFolder\\" + row["ID"].ToString() + ".jpg");
    }
}

private Image BinaryToImage(byte[] b)
{
    if (b == null) 
        return null;

    MemoryStream memStream = new MemoryStream();
    memStream.Write(b, 0, b.Length);

    return Image.FromStream(memStream);
}

private DataTable Rimage()
{
    con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS;
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "select * from dbo.PicTBL";
    cmd.Connection = con;
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    con.Open();
    adp.Fill(dt);

    return dt;
}
0
Mina Mansoori