我正在尝试在我的Image控件上显示图像,但它无效。我基本上将它用作屏幕截图预览。我将位图保存到服务器路径中的Images文件夹,然后将控件的ImageUrl设置为保存的图像位置。这是我的代码。此代码在按钮单击时执行:
img.Save(Server.MapPath("~/Images/") + "test.png", ImageFormat.Png);
Image1.ImageUrl = Server.MapPath("~/Images/") + "test.png";
Image1.DataBind();
没有捕获异常,图像在路径中正确保存。
答案 0 :(得分:6)
您不能将Server.MapPath用于URL,更改为此(假设images文件夹位于应用程序的根文件夹中):
Image1.ImageUrl = "/images/test.png";
更新:
正如Graymatter建议的那样评论应该是:
Image1.ImageUrl = "~/images/test.png";
我忽略了我们所说的图像服务器控件
答案 1 :(得分:2)
链接直接写入应用程序中的Web文件夹绝不是一个好主意。我宁愿去创建一个ashx处理程序并回流图像。你可以创建一个看起来像这样的文件(例如getmyimage.ashx.cs):
using System;
using System.Web;
public class getmyimage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Response.ContentType = "image/png";
Response.WriteFile("x:\myimages\test.png");
Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
getmyimage.ashx将包含以下内容:
<% @ webhandler language="C#" class="getmyimage" %>
在此代码中,“x:\ myimages \ test.png”将是您要流回浏览器的图像。您可以向getmyimage.ashx网址添加参数,以指定应加载哪个图像。您还可以修改代码以动态生成图像或沿着这些行生成图像。
然后,您可以指向图片网址中的“getmyimage.ashx”。所以你的imageurl看起来像这样:
Image1.ImageUrl = "getmyimage.ashx"
正如Antonio在评论中指出的那样,您需要查看所需的缓存选项类型并进行设置。默认行为是始终发送回图像而不是缓存它。如果要缓存图像,则应查看以下帖子:
要直接映射到问题中的图像,您可以使用:
Image1.ImageUrl = "~/images/test.png"