0

我正在尝试使用 C# Windows 窗体应用程序将本地 HTML 文件转换为位图图像。为此,我正在使用内存流读取 HTML 文件。但是在将内存流传递给 Bitmap 对象后,它说“参数无效”。

下面是示例代码

MemoryStream stm = new MemoryStream(data); 位图 f_Bitmap = (Bitmap)Image.FromStream(stm);

请提供如何将 HTML 文件转换为位图图像的解决方案。

谢谢。

4

4 回答 4

1

您始终可以使用 WebBrowser 对象(在此处阅读更多内容)。

    public void WBCapture()
    {
        WebBrowser wb = new WebBrowser();
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);

        wb.ScrollBarsEnabled = true;
        wb.Width = 800;
        wb.Height = 600;
        wb.DocumentText = @"<b>Hello</b> <i>World</i>!!!";
        // Or you can navigate to:
        // wb.Navigate("http://mydocmentsurl.com");
    }

    void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        WebBrowser wb = (WebBrowser)sender;

        using (Graphics graphics = wb.CreateGraphics())
        using (Bitmap bitmap = new Bitmap(wb.Width, wb.Height, graphics))
        {
            Rectangle bounds = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
            wb.DrawToBitmap(bitmap, bounds);
            bitmap.Save(@"C:\caputre.png", ImageFormat.Png);
        }
    }
于 2012-12-01T07:19:19.940 回答
0

如果要将 HTML 文件的内容保存为位图,则不能只将字节放入位图对象中。您需要使用 WebBrowser 对象并手动绘制它。是一篇概述它的文章。

于 2012-07-09T13:31:42.677 回答
0

我的解释是关于您收到的错误:

它引发错误的原因是您所做的只是将 HTML 文本从文件推送到流中,当 FromStream 使用数据时,它说数据的格式不是位图或不够好

于 2012-07-09T13:28:09.693 回答
-1

只要您所说的 HTML 文件是指向图像文件的直接链接,这将起作用:

            var request = (HttpWebRequest) WebRequest.Create(IMAGE_URL);

            using (var stream = request.GetResponse().GetResponseStream())
            {
                using (var image = Image.FromStream(stream))
                {
                    var bitmap = new Bitmap(image);
                    //use or return bitmap, image will automatically get disposed
                }
            }

将 IMAGE_URL 替换为您的网址。

如果 HTML 文件包含文本形式的 URL,那么您需要将其解析出来。

如果此文件是本地文件,您可以简单地使用 FileStream(或 FileReader)来获取本地文件的流(这类似于 WebRequest 上的 GetResponseStream。)

如果您有任何问题,请告诉我。

希望能帮助到你。

于 2012-07-09T13:25:22.450 回答