将位图转换为ASP.NET的图像

这就是我的代码现在的样子:

System.Drawing.Image objImage = System.Drawing.Image.FromFile(Server.MapPath("aaa.jpg")); int height = objImage.Height; int width = objImage.Width; System.Drawing.Bitmap bitmapimage = new System.Drawing.Bitmap(objImage, width, height); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmapimage); System.Drawing.Image bitmap2 = (System.Drawing.Image)Bitmap.FromFile(Server.MapPath("sem.png")); g.DrawImage(bitmap2, (objImage.Width - bitmap2.Width) / 2, (objImage.Height - bitmap2.Height) / 2); MemoryStream stream = new MemoryStream(); bitmapimage.Save(stream, ImageFormat.Jpeg); String saveImagePath = Server.MapPath("ImagesMerge/") + "aaa.jpg"; bitmapimage.Save(saveImagePath); imgBig.ImageUrl = saveImagePath; 

我现在的问题是图像没有显示在浏览器中,我不明白为什么。

jmaglasang说的,我建议你使用ashx文件,如果你不需要保留图像,只需将图像流直接发送到http而不保存在磁盘上

所以你只需要做类似的事情

   

请查看此代码 ,了解如何发送内存中不存在于驱动器上的映像

BitmapImage的子类,因此无需将Bitmap转换为Image 。 它已经……

可能是因为saveImagePath将是一个无法从浏览器访问的本地路径(例如c:\somepath\aaa.jpg )。 您可能想要设置ImageUrl = "ImagesMerge/aaa.jpg"

MapPath将为您提供一个physycal地址,而不是浏览器需要访问图像的虚拟地址。

你也可以尝试:

 imgBig.ImageUrl = ResolveUrl(saveImagePath); 

编辑:

如果saveImagePath位于WebApplication Directory下,则对目录结构进行一些修改,即修改文件,删除和创建可能导致应用程序池回收,一旦达到最大回收计数,应用程序池将停止导致“服务器不可用”错误。

我建议在一个单独的目录(不在Apps目录下)添加/保存/修改图像,然后创建一个读取图像的处理程序(ASHX),这只是一个建议。

您可能忘记设置Response.Headers。 查看以下示例,该示例显示如何创建条形图图像,然后在屏幕上显示:

http://www.highoncoding.com/Articles/399_Creating_Bar_Chart_Using__NET_Graphics_API.aspx