我有一个可能很容易的问题。我有一个存储在数据库中的图像,然后我在我的应用程序中使用了一个C#方法来获取该图像并将其存储在一个如下所示的自定义类中:
public class MyImage
{
public System.Drawing.Image myImageFromDB;
public string imageName;
public int imageNumberInCollection;
}
我的问题是:我可以/如何在HTML图像标记中使用此类中的图像?我尝试了以下但它只返回一个带有红色X的框:
//myImageFromDBCollection is a list of MyImage objects
foreach(var ind in myImagesFromDBCollection)
{
table += String.Format("<image src={0} />", ind.myImageFromDB);
}
关于我做错的任何想法?
答案 0 :(得分:9)
我最终选择Brads方法来解决这个问题(请参阅问题下的评论)我最终创建了一个方法,它接受System.Drawing.Image并将其转换为字节数组,然后对该字节数组进行编码以获取图片。代码如下所示:
byte[] imgBytes = turnImageToByteArray(ind.ind.myImageFromDB);
string imgString = Convert.ToBase64String(imgBytes);
table += String.Format("img src=\"data:image/Bmp;base64,{0}\">", imgString);
private byte[] turnImageToByteArray(System.Drawing.Image img)
{
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
return ms.ToArray();
}
目前这适用于我的目的,所以感谢大家和他们的建议,因为每个人都会来,并帮助:-)
答案 1 :(得分:3)
可以使用通用处理程序(ashx文件)提供图像:
public class StickerHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/png";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput = false;
//TODO: link your MyImage to iSource using imageId query parameter...
Image iSource = null;
MemoryStream ms = new MemoryStream();
iSource.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] data = ms.ToArray();
ms.Dispose();
g.Flush();
g.Dispose();
iSource.Dispose();
context.Response.BinaryWrite(data);
}
public bool IsReusable
{
get
{
return true;
}
}
}
有关通用处理程序的更多信息,请访问:
http://msdn.microsoft.com/en-us/library/bb398986(v=vs.100).aspx
在您的图片中:
<img src='StickerHandler.ashx?img=imageId' />
快乐的编码!
答案 2 :(得分:1)
如果我是你,我会将图像文件保存在磁盘上,并在数据库中保存图像文件名。
如果您的图片格式存在问题,请查看您的来源并确保其正确无误。
答案 3 :(得分:1)
如果必须将图像存储在数据库中,查看图像的简单方法是使用图像处理程序。
基本上,您可以创建一个ASHX
处理程序,它接受一个查询字符串,该字符串是数据库中的图像ID,并返回图像内容以及正确的mime类型。这在C#中很简单。
然后,您可以将<img />
标记指向具有指定ID的处理程序。像
table += String.Format("<image src='/ViewImage.ashx?id={0}' />", ind.myImageId);
Here is a basic tutorial 让您入门。
常见的性能改进是将图像缓存在处理程序中的磁盘上。