我使用的是Gecko的.NET WebBrowser控件来获取HTML页面。
然后,我用这个代码,使这个HTML页面的截图:
void LoadingFinished(object sender, EventArgs args)
{
try
{
myBrowser.Document.Body.SetAttribute("style", "overflow:hidden");
if (screenshotkey != "")
{
Bitmap bitmap = new Bitmap(myBrowser.Width, myBrowser.Height);
myBrowser.DrawToBitmap(bitmap, new Rectangle(0, 0, myBrowser.Width, myBrowser.Height));
bitmap.Save("Screenshots/" + screenshotkey + ".png", ImageFormat.Png);
}
}
catch (Exception dfkvsn)
{
errorloadingpage();
}
}
我删除从代码一些东西上面不是很重要的 - 如设置浏览器宽度等本来的代码是100%的功能。
问题是,当它节省了PNG截图(DrawToBitmap线) -在一些地方被创建图片有白色像素,不应该在那里(web浏览器最初没有它们),请参阅该链接 。
当我使用标准的.NET WebBrowser控件同样的事情正在发生,所以它不是壁虎问题。
我不知道如何处理这个。 有没有更好的方式来保存为位图? 或者,这是最好的.NET可以做什么?
修复。
原来,这似乎是白色像素 - 只是透明。
他们只在照片有一个最深的黑色的地方(RGB 0,0,0)
出于某种原因,.NET也救不了这个颜色的文件。
所以我只是添加的代码,使整个画面的黑线,并且最重要的是我记录我的屏幕截图。
由于它是2层现在 - 透明像素现在看来是黑色的 - 正是我想要的 - 没有白色像素。
下面是最终代码:
void LoadingFinished(object sender, EventArgs args)
{
try
{
myBrowser.Document.Body.SetAttribute("style", "overflow:hidden");
if (screenshotkey != "")
{
panel1.Height = myBrowser.Document.Body.ScrollHeight;
panel1.Width = myBrowser.Document.Body.ScrollWidth;
this.Size = new System.Drawing.Size(panel1.Width+20, panel1.Height+20);
if (!Directory.Exists("Screenshots"))
{
Directory.CreateDirectory("Screenshots");
}
Bitmap bitmap = new Bitmap(myBrowser.Width, myBrowser.Height);
for (int Xcount = 0; Xcount < bitmap.Width; Xcount++)
{
for (int Ycount = 0; Ycount < bitmap.Height; Ycount++)
{
bitmap.SetPixel(Xcount, Ycount, Color.Black);
}
}
myBrowser.DrawToBitmap(bitmap, new Rectangle(0, 0, myBrowser.Width, myBrowser.Height));
bitmap.Save("Screenshots/" + screenshotkey + ".png", ImageFormat.Png);
}
}
catch (Exception dfkvsn)
{
errorloadingpage();
}
}
这正是发生了什么事给我。 我想现在我的也是固定的。 我从来没有想过,最初的图像(之前以书面形式控制)需要什么。 请注意,简化代码,我已经附加了初始图像清除所有的黑色。
try
{
string fn = Path.Combine(Path.GetTempPath(), "Error_screen.png");
Bitmap bmp = new Bitmap(internalBrowser.Width, internalBrowser.Height);
// In order to use DrawToBitmap, the image must have an INITIAL image.
// Not sure why. Perhaps it uses this initial image as a mask??? Dunno.
using (Graphics G = Graphics.FromImage(bmp))
{
G.Clear(Color.Black);
}
internalBrowser.DrawToBitmap(bmp, new Rectangle(0, 0,
internalBrowser.Width, internalBrowser.Height));
bmp.Save(fn, ImageFormat.Png);
}
catch
{
// handle exceptions here.
return "";
}
一个非常有趣的边注:这适用于我的控制,是我从来没有表现出一个形式! 我的存在形式为一具无头的Web浏览器,但这实际形式从未见过天日。