我正在尝试以编程方式拍摄网页的屏幕截图.我可能还需要拍摄全页或部分页面的屏幕截图.有没有办法做到这一点?
我一直在我的asp.net页面中使用WebBrowser.DrawtoBitmap()在单独的STA线程中运行,以将网页捕获为图像.但我发现我一直在为少数网站拍摄空白图像.我知道这种方法不是"正式"支持的,但如果有人可以为我提供任何理由或解决这些空白图像问题,那就太好了.
根据以下链接和我的控制台应用程序,该方法DrawToBitmap不尊重不透明度.
证明链接:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/e9704309-0c52-442d-80e0-2f8393dcd313/webbrowser-opacity-problem-
我的HTML代码:http://fiddle.jshell.net/L37TC/
<div id="fader" style="background-color: #ff0000">ffff</div>
<div style="background-color: blue; opacity:0;filter:alpha(opacity=0);">HIDDEN TEXT!</div>
SomeText
Run Code Online (Sandbox Code Playgroud)
我的C#控制台代码:
var bmp = new Bitmap(640,480, PixelFormat::Format32bppArgb)
var web = (System.Windows.Forms.Control)sender;
web.DrawToBitmap(bmp, Rectangle(0, 0, 640,480));
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找替代的.NET内置解决方案(没有CEF,Awesomium,或任何扩展请)只是.NET的内置功能来修复错误或替代解决方案,以在我的控制台中截取Web URL的屏幕截图应用.
如果我让WebBrowser窗口对我的客户端可见并且使用CopyFromScreen不透明度并且HIDDEN TEXT没有显示,那么我怎么不想让WebBrowser窗口对桌面屏幕可见.
我正在寻找一个内置的解决方案,可以在没有问题的情况下从发布的URL中截取屏幕截图HIDDEN TEXT.换句话说,是尊重opacity的解决方案.
EDIT1:我的所有像素Bitmap class(.NET类不是BMP格式)的alpha值为255.所以问题不在于文件格式.我尝试过PNG和任何其他.NET支持的格式.
完整的源代码(控制台模板,需要添加引用System.Drawing和System.Windows.Forms
class Program
{
static System.Windows.Forms.WebBrowser w = new System.Windows.Forms.WebBrowser();
[STAThread]
static void Main(string[] args) …Run Code Online (Sandbox Code Playgroud) 在 c# 中使用 control.drawtobitmap 失败后,我的第二个选择是截取桌面的屏幕截图并裁剪出所需的部分。一旦我切换用户帐户,我的打嗝就会出现,虽然程序不会崩溃,但一旦用户切换,程序只会生成纯黑色图像。
我使用此代码作为参考: WebBrowser.DrawToBitmap() 或其他方法?
我想这在逻辑上是有道理的,因为这将有助于 Windows 节省资源。
在我的情况下,我有哪些选择/解决方案?
编辑 1 对测试代码进行了修改:
int c = 0;
while (true)
{
try
{
c++;
Rectangle formBounds = this.Bounds;
Bitmap bmp = new Bitmap(formBounds.Width, formBounds.Height);
using (Graphics g = Graphics.FromImage(bmp))
g.CopyFromScreen(formBounds.Location, Point.Empty, formBounds.Size);
bmp.Save("picture" + c.ToString() + ".jpg");
Thread.Sleep(5000);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
这在用户帐户上运行良好,但是一旦我切换用户,它就会返回异常:句柄无效。
有任何想法吗?
编辑2:
DrawToBitmap 中的错误不是完全随机的...如果我使用您提供的代码:
Bitmap bmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
this.DrawToBitmap(bmp, this.ClientRectangle);
bmp.Save(".\\picture.jpg");
Run Code Online (Sandbox Code Playgroud)
它完美地工作,例如:http : //oi61.tinypic.com/1z23ynp.jpg
但是,当我右键单击 Web 浏览器控件时,DrawToBitmap 将返回一个空白图像。
示例: …
c# ×4
screenshot ×3
.net ×2
asp.net ×2
bitmap ×1
browser ×1
drawtobitmap ×1
vb.net ×1
windows-7 ×1