C# 如何将响应流转换为图像?

C# 如何将响应流转换为图像?,c#,asp.net,visual-studio-2008,html-to-jpeg,C#,Asp.net,Visual Studio 2008,Html To Jpeg,请注意,此链接没有帮助 在之前被问到的问题中,回答者说他们并没有得到我想要做的事情,所以这是完整的代码 我只是希望在页面上呈现一个图像(内容),而不是一个表 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.IO; using System.Text; using System.Data; using Syst

请注意,此链接没有帮助

在之前被问到的问题中,回答者说他们并没有得到我想要做的事情,所以这是完整的代码

我只是希望在页面上呈现一个图像(内容),而不是一个表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Text;
using System.Data;
using System.Drawing;


public partial class _Default : System.Web.UI.Page 
{
protected void Page_Load(object sender, EventArgs e)
{

    System.Web.UI.WebControls.Panel panelmain = new System.Web.UI.WebControls.Panel();
    System.Web.UI.WebControls.Literal abc = new System.Web.UI.WebControls.Literal();
    abc.Text = "as<br/>dasdas<br/>dasdad";


    DataSet ds = new DataSet();
    DataTable dt;
    DataRow dr;
    DataColumn idCoulumn;
    DataColumn nameCoulumn;

    dt = new DataTable();
    idCoulumn = new DataColumn("ID", Type.GetType("System.Int32"));
    nameCoulumn = new DataColumn("Name", Type.GetType("System.String"));
    dt.Columns.Add(idCoulumn);
    dt.Columns.Add(nameCoulumn);
    dr = dt.NewRow();
    dr["ID"] = 1;
    dr["Name"] = "Name1";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr["ID"] = 2;
    dr["Name"] = "Name2";
    dt.Rows.Add(dr);

    ds.Tables.Add(dt);

    System.Web.UI.WebControls.GridView grid1 = new 
    System.Web.UI.WebControls.GridView();
    grid1.DataSource = ds;
    grid1.DataBind();

    panelmain.Controls.Add(abc);
    panelmain.Controls.Add(grid1);

    string toexport;
    toexport = RenderControl(panelmain);

    Byte[] bitmapData = new Byte[100000];
    bitmapData = Convert.FromBase64String(FixBase64ForImage(toexport));
    System.IO.MemoryStream streamBitmap = new System.IO.MemoryStream(bitmapData);
    Bitmap bitImage = new Bitmap((Bitmap)Image.FromStream(streamBitmap));

    Response.ContentType = "image/gif";
    Response.AppendHeader("Content-Disposition", "inline;filename=tm.gif");
    Response.BufferOutput = true;
    Response.Charset = "utf-8";
    Response.Write(bitImage);
    Response.End();

    }



public string FixBase64ForImage(string Image)
{
    System.Text.StringBuilder sbText = new System.Text.StringBuilder(Image, Image.Length);

    sbText.Replace("\r\n", String.Empty);

    sbText.Replace(" ", String.Empty);

    return sbText.ToString();
}



public string RenderControl(Control ctrl)
{
    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);

    ctrl.RenderControl(hw);
    Response.Write(sb);

    return sb.ToString();



}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.IO;
使用系统文本;
使用系统数据;
使用系统图;
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
System.Web.UI.WebControls.Panel panelmain=new System.Web.UI.WebControls.Panel();
System.Web.UI.WebControls.Literal abc=new System.Web.UI.WebControls.Literal();
abc.Text=“as
dasdas
dasdad”; 数据集ds=新数据集(); 数据表dt; 数据行dr; 数据列IDCOULMN; 数据列名称coulumn; dt=新数据表(); idCoulumn=newdatacolumn(“ID”,Type.GetType(“System.Int32”); nameCoulumn=newdatacolumn(“Name”,Type.GetType(“System.String”); dt.Columns.Add(idCoulumn); dt.Columns.Add(nameCoulumn); dr=dt.NewRow(); dr[“ID”]=1; dr[“Name”]=“Name1”; dt.Rows.Add(dr); dr=dt.NewRow(); dr[“ID”]=2; dr[“Name”]=“Name2”; dt.Rows.Add(dr); ds.Tables.Add(dt); System.Web.UI.WebControls.GridView grid1=新建 System.Web.UI.WebControls.GridView(); grid1.DataSource=ds; grid1.DataBind(); panelmain.Controls.Add(abc); panelmain.Controls.Add(grid1); 字符串输出; toexport=渲染控制(panelmain); 字节[]位图数据=新字节[100000]; bitmapData=Convert.FromBase64String(FixBase64ForImage(toexport)); System.IO.MemoryStream streamBitmap=新的System.IO.MemoryStream(位图数据); Bitmap BITMAGE=新位图((位图)Image.FromStream(streamBitmap)); Response.ContentType=“image/gif”; AppendHeader(“内容处置”、“内联;文件名=tm.gif”); Response.BufferOutput=true; 响应。Charset=“utf-8”; 响应。写入(BITMAGE); Response.End(); } 公共字符串FixBase64ForImage(字符串图像) { System.Text.StringBuilder sbText=新的System.Text.StringBuilder(Image,Image.Length); sbText.Replace(“\r\n”,String.Empty); sbText.Replace(“,String.Empty”); 返回sbText.ToString(); } 公共字符串渲染控件(控件ctrl) { StringBuilder sb=新的StringBuilder(); StringWriter tw=新的StringWriter(sb); HtmlTextWriter hw=新的HtmlTextWriter(tw); 控制渲染控制(hw); 写信给(某人); 使某人返回字符串(); }
在中,您已收到(我)的答复,指此问题的答案。该线程中的第二个答案链接到web上的另一个页面,其中解释了启动
WebBrowser
对象、渲染页面、捕获图像、将其转换为首选图像文件格式并将其保存到本地的整个过程。这不是一项简单的任务(预计要花几个小时),但也不要太辛苦


要重复,只需看一看,下载源代码并进行实验

首先,您的代码完全缺少加载HTML呈现引擎并使用该引擎呈现内容的部分。公共字符串RenderControl(Control ctrl)这就完成了,它可以使用返回的字符串生成一个文档文件。请帮助。我缺少什么给linksIt不生成“文档文件”,它只生成HTML。将HTML呈现到图像是一项非常艰巨的任务。看看web浏览器有多复杂。@user287745:user@Matti是正确的,
public string RenderControl(Control-ctrl)
不创建HTML图片,而是创建内存中的HTML代码字符串。创建HTML代码的图像意味着使用多种浏览器中的一种呈现HTML代码,将其捕获为屏幕截图,然后使用该图像。的可能副本