如何将二进制图像传递给图像处理程序以在DataList中显示它?

时间:2012-10-22 14:17:32

标签: c# asp.net image httphandler

我有一个网页,其中包含一个名为DataList控件

中显示一些图像的方法

MyImage.cs

class MyImage
{
    string Name { get; set; }
    byte[] Jpeg { get; set; } 
}

MyImages.aspx.cs

public void DisplayMyImages(IEnumerable<MyImage> myImages)
{
    this.myImagesDataList.DataSource = myImages;
    this.myImagesDataList.DataBind();  
}

/// ...

protected void myImagesDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        MyImage myImage = (MyImage)e.Item.DataItem;
        Image myImageImage = (Image)e.Item.FindControl("myImageImage");

        // How to pass myImage.Jpeg to ImageHandler? form here

        myImageImage.ImageUrl = "~/Handlers/ImageHandler.ashx";
    }
}

但如果jpeg图像已从数据库中提取并传递给ImageHandler函数,如何将jpeg图像传递给DisplayMyImages()

说明:

我不想将它们保存回文件并将查询字符串中的路径传递给ImageHandler

无法使用标准查询字符串方法,因为我不想违反模型视图演示方法

4 个答案:

答案 0 :(得分:1)

Normaly图像应该由ImageHandler生成,而不是传递给它,所以只需翻转你的逻辑。 你最终会得到这样的东西:

myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx?id=yourImageId";

确保设置正确的内容类型,如下所示:

context.Response.ContentType = "image/png";

这就是你将图像写成回应的方式:

byte[] fileData = null;
//TODO: load your image data into fileData!
context.Response.BinaryWrite(fileData);

答案 1 :(得分:1)

我刚回答your question on CodeProject,但我也会在这里复制答案。

根据图片的大小以及您需要支持的浏览器,您可以使用data URI

myImageImage.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(myImage.Jpeg);

(如果您使用的是IE8,则限制为32Kb;根本不支持早期版本的IE。)

答案 2 :(得分:0)

传递图像的ID并在需要时直接从数据库中检索并使用类似的代码会更容易;

var data = //Code to retrieve byte[];

int len = data.Length;
response.ContentType = "image/png";
response.BinaryWrite(data);

答案 3 :(得分:0)

首先,我认为你可能会出错

myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx";    

注意:您需要包含带有.ashx而不是.aspx文件的ImageHandler文件。 .ashx Generic Handler在从ImageHandler检索图像时作为上下文图像。这是ImageHandler文件的正确形式。

imgProfile.ImageUrl = "ImageHandler.ashx?imgid=" + imageId.ToString();

click here to see complete referece.

希望,它可能对你有所帮助。 !!