0

从 WebBrowser 的 DrawToBitmap() 函数生成位图时,同时使用两个大小相同的图像,为什么在某些情况下,将位图转换为字节数组时,会有不同大小的数组?我使用的功能:

public static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

从这里开始,我使用的图像存在问题。它们是不同的,我使用http://www.google.comhttp://www.google.co.uk的快照。它们都生成大小为 {Width = 833 Height = 500} 的图像。但是,字节数组的大小分别为 20072 和 24368。

有任何想法吗?

谢谢!

编辑

让我添加更多信息。图像被转换为​​ BMP。我会附上更多我的 C# 让大家了解更多。

public void captureSnapshot(string url)
{
    this.url = url;
    var thr = new Thread(() =>
    {
        browser = new WebBrowser();
        browser.DocumentCompleted += snapshotEventCompleted;
        browser.Navigate(url);
        Application.Run();
    });

    thr.SetApartmentState(ApartmentState.STA);
    thr.Start();
}

public void snapshotEventCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    int pageHeight = browser.Document.Body.ScrollRectangle.Height;
    int pageWidth = browser.Document.Body.ScrollRectangle.Width;
    snapshot = new Bitmap(pageWidth, pageHeight);
    browser.Size = new Size(pageWidth, pageHeight);
    browser.ScrollBarsEnabled = false;
    browser.DrawToBitmap(snapshot, new Rectangle(browser.Location.X, browser.Location.Y, pageWidth, pageHeight));
}

解决了:

所以事实证明函数 DrawToBitmap 是不支持的。呸呸呸

4

3 回答 3

3

这取决于用于保存图像的编解码器。例如,如果它是 PNG 或 JPG,那么压缩可能会为相同大小的图像生成不同大小的输出。这是因为大的均匀区域比具有大量细节的区域更有效地压缩。

于 2013-05-29T08:59:35.857 回答
2

这是因为一个叫做Stride请看这篇文章的东西:Image Stride

在此处输入图像描述

包含相同尺寸视频帧的两个缓冲区可以有两个不同的步幅。如果处理视频图像,则必须考虑步幅。

于 2013-05-29T08:57:36.597 回答
0

结果证明函数 DrawToBitmap 不支持

于 2013-05-29T19:24:18.003 回答