繁体   English   中英

如何将图像动态绑定到图像控件?

[英]How to bind images to image control dynamically?

是的,我知道...是的,我做了google。 问题是我对ASP.NET还是陌生的,没有任何搜索结果符合我的要求。

我有这个:

<asp:Image ID="imgView" runat="server" />

我在数据库中存储了图像,可以通过以下方法检索它们:

public static List<Image> GetRezeptImages(int rezeptId)
{
    using (CookBookDataContext ctx = new CookBookDataContext(Resources.ResourceFile.DBConnection))
    {
        IEnumerable<RezeptBilder> bilder = from b in ctx.RezeptBilders where b.FKRezept == rezeptId select b;
        List<Image> imageList = new List<Image>();

        foreach (RezeptBilder b in bilder)
        {
            imageList.Add(Helper.ByteArrayToImage(b.Bild.ToArray()));
        }

        return imageList;
    }
}

非常重要,因为我从一个Winforms应用程序开始,现在我想将其变成一个ASP网站,因此Image来自System.Drawing.Image而不是System.Web.UI.WebControls.Image 我也可以将我的图片转换为字节数组,反之亦然:

public static byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
    using (MemoryStream ms = new MemoryStream())
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return ms.ToArray();
    }
}

public static Image ByteArrayToImage(byte[] byteArrayIn)
{
    using (MemoryStream ms = new MemoryStream(byteArrayIn))
    {
        Image returnImage = Image.FromStream(ms);
        return returnImage;
    }
}

现在,如果触发了某个事件,则会从数据库中获取System.Drawing.Image ,我想将其显示在图像控件中。 在这里,我需要一个Image-Url,因此必须将图像保存到服务器。 我不能这样做,因为它不是System.Web.UI.WebControls.Image 我可以将其转换为字节数组,然后呢?

什么是最温和的方式呢?

提前致谢!

希望这会有所帮助

System.IO.MemoryStream ms = new System.IO.MemoryStream();


image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
  Response.ClearContent();
  Response.ContentType = "image/Gif";
  Response.BinaryWrite(ms.ToArray());


<asp:Image ID="Image1" runat="server" ImageUrl="~/pic.aspx"/>

您可以使用base64字符串显示二进制图像。 就像是-

string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
Image1.ImageUrl = "data:image/png;base64," + base64String;

您可以通过演示链接获取有关此链接的更多详细信息-

http://www.aspsnippets.com/Articles/Display-image-from-database-in-Image-control-without-using-Generic-Handler-in-ASPNet.aspx

做这样的事情,我可能会为我工作。

  public class ImageToSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
            System.Globalization.CultureInfo culture)
    {
        Image image = value as Image;
        if (image != null)
        {
            MemoryStream ms = new MemoryStream();
            image.Save(ms, image.RawFormat);
            ms.Seek(0, SeekOrigin.Begin);
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.StreamSource = ms;
            bi.EndInit();
            return bi;
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

创造物产

public Image UserImage
{
    get
        {
            return _model.UserImage;
        }
}   

您是如何生成byte []的? 它工作正常-

string id = "1";
byte[] bytes = (byte[])GetData("SELECT Data FROM tblFiles WHERE Id =" + id).Rows[0]["Data"];
string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
Image1.ImageUrl = "data:image/png;base64," + base64String;


private DataTable GetData(string query)
{
        DataTable dt = new DataTable();
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(query))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    sda.Fill(dt);
                }
            }
            return dt;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM