如何从Web应用程序中捕获.NET中的屏幕截图?

时间:2010-05-26 19:33:48

标签: .net asp.net

在Java中,我们可以这样做:

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;

...

public void captureScreen(String fileName) throws Exception {

   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   Rectangle screenRectangle = new Rectangle(screenSize);
   Robot robot = new Robot();
   BufferedImage image = robot.createScreenCapture(screenRectangle);
   ImageIO.write(image, "png", new File(fileName));

}

...

我们如何通过Web应用程序在.NET中执行此操作?捕获客户端的屏幕并将其从应用程序内部发送到服务器。

4 个答案:

答案 0 :(得分:6)

.NET图形对象有一个名为CopyFromScreen()的方法,它将捕获屏幕的矩形区域并将其复制到位图中。最好的方法类似于以下内容:

public void CaptureImage(Point SourcePoint, Point DestinationPoint, Rectangle Selection, string FilePath)
{
    using (Bitmap bitmap = new Bitmap(Selection.Width, Selection.Height)) {
        using (Graphics g = Graphics.FromImage(bitmap)) {
            g.CopyFromScreen(SourcePoint,DestinationPoint, Selection.Size);
        }
        bitmap.Save(FilePath, ImageFormat.Bmp);
    }
}

答案 1 :(得分:4)

不,单凭html或javascript无法做到这一点。他们根本没有这样做的方法。可能的原因是John Saunders指出这将是一个安全风险。 Web应用程序可以捕获用户屏幕上发生的任何事情,而无需了解它。

您所显示的服务器端代码不起作用,因为它在服务器端运行。 Sliverlight或ActiveX表单可能有效,但没有选项,因为您希望它可以在所有平台上的所有浏览器上运行。

修改

icemanind让我们知道it is possible using Silverlight,但你无法捕获整个屏幕。可能是安全原因。

答案 2 :(得分:1)

答案 3 :(得分:1)

使用基本Web应用程序或Silverlight无法实现这一点。

我也非常怀疑Java中的Robot类在浏览器applet运行时不会让你截取屏幕截图,否则这将成为Java中最大的安全漏洞之一,如果是一个基本的Web应用程序像素大小的Java小程序可以通过互联网将我桌面的实时视频流式传输回服务器。

让我们退后一步,问一下:你想要完成什么?你为什么要截取截图?