我使用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行)时 - 在某些地方,创建的图片具有不应存在的白色像素(WebBrowser最初没有它们),请参阅the link。< / p>
当我使用标准的.NET WebBrowser控件时,也发生了同样的事情,所以这不是Gecko问题。
我不知道如何处理这个问题。 有没有更好的方法将其保存到位图?或者这是最好的.NET可以做到的吗?
答案 0 :(得分:3)
修正了它
事实证明,似乎是白色的像素 - 只是透明的。
并且它们仅在图片具有最深的黑色(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();
}
}
答案 1 :(得分:2)
这完全是我发生的事情。我想我的现在也已经修好了。我从未想过初始图像(在编写控件之前)需要任何东西。请注意我附加的简化代码,用于将初始图像清除为全黑。
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浏览器存在,但这种实际形式从未见过光明。