Tag: 截图

使用C#截取任何外部应用程序

我们有一个C#(WPF)应用程序,我们想在其中截取我们发布的任意应用程序的截图(即我们引用了我们开始的流程)。 应用程序可以最小化或在其他窗口后面,但我们仍然只想要单个应用程序的图像,而不是重叠的像素。 我知道使用BitBlt或PrintWindow的典型P / Invoke解决方案大部分时间都可以工作,但是当处理直接绘制到图形设备的DirectX或OpenGL应用程序时,这些解决方案会失败(我只会得到黑/透明像素)。 我发现这篇文章是关于从C#截取Direct3D应用程序的截图,所以我想我已经涵盖了这个案例。 所以我的问题是: 我如何为OpenGL应用程序执行此操作? 确定适当使用方法(PW / DX / GL)的最简单方法是什么? 有没有一种通用的方法来做到这一点? 对于#2,我是否会降级检查可执行文件加载的模块,看看是否加载了DirectX或OpenGL DLL / Assembly? 这只需要在Windows XP上运行(不是跨平台,如果有的话,不会很快转到Vista / 7)。

从位图图像列表中创建.avi文件

我目前正在尝试制作屏幕录像机。 我制作了位图图像列表,并希望将它们放在.avi文件中。 无论如何在C#中做到这一点? 注意:我是新手,所以保持简单

在selenium c#中的下拉列表中截取选项

我想使用selenium c#捕获下拉列表中显示的选项的屏幕截图,就像下面显示的图像一样。 我尝试了多种方法来截取屏幕截图。 基本上我要扩展元素的下拉列表以捕获屏幕截图。 这就是我所做的 //#1 var element = Driver.FindElement(By.Id(“carsId”)); Actions builder = new Actions(Driver); builder.SendKeys(element, Keys.LeftAlt + Keys.Down).Build().Perform(); //#2 Actions act = new Actions(Driver); act.MoveToElement(element).Build().Perform(); 当我在网站上完成但没有通过selenium工作时,按下Alt + Down键的第一个实现工作。 第二个实现也不起作用。 我也尝试过builder.ClickAndHold()方法。 我在这里还有另一个问题。 是否真的有可能selenium点击并扩展一段时间,直到抓住屏幕? 任何帮助将不胜感激。

c#截取特定区域的截图

我知道有很多这样的问题,但他们的答案都没有对我有用,或者我无法正确地做到,无论如何,如果有可能请给我一个简单的代码! 我知道绿点的位置,我想根据这个位置构建一个矩形。 例: 最重要的是如何拍摄这个区域的截图? 我不知道如何更改此代码以适用于我的情况。 private Bitmap Screenshot() { Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graphics.FromImage(bmpScreenshot); g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size); return bmpScreenshot; }

C#转换屏幕截图数据

我需要截取屏幕截图,如果不保存则很容易。 我会将图像数据直接发送到PHP脚本。 因为我目前没有这个PHP脚本,所以我搜索最简单的格式,我应该转换截图数据。 出于调试原因,在我获得PHP脚本之前,我想使用C#在客户端转换这些数据的图片。 我的代码目前用于截取并转换它(我不确定我是否可以将我的日志文件中的输出转换回图片): internal static byte[] ImageToByteArray(Image img) { byte[] byteArray = new byte[0]; MemoryStream stream = new MemoryStream(); img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); stream.Close(); byteArray = stream.ToArray(); return byteArray; } public static string TakeScreenshot() { String filepath = @”C:\log2.txt”; Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); Graphics graphics = Graphics.FromImage(bitmap); graphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, […]

游戏时在Vista和Win7中的空白截图

我注意到另一个人也请求帮助。 我读了那篇文章,似乎还没有解决。 我也尝试从我的代码更改为“2次点击屏幕截图”post中的代码,但是在我的代码中实现这个代码由于某种原因搞砸了我的所有其他代码。 目前,屏幕截图在Win XP中完美呈现。 在Vista和Win7中,除非游戏以窗口模式播放,否则它们会显示空白。 我希望有人可以帮助我们,因为这是完成我们的计划的最后一步,如果没有修复这个问题,我们无法完成。 我用于屏幕截图的C#代码如下。 Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot); gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

捕获表单的一部分的屏幕截图?

我目前有一个winform,在运行时,我需要截取它的一部分并将其保存为图像。 特别是,我想要一个名为“panel1”的面板的屏幕截图。 我已经能够找到有关如何获取整个webforms或整个屏幕的屏幕截图的信息……但是我很难找到关于获取屏幕的一部分的信息。 有没有人有任何可以指出我正确方向的信息? 即使MSDN网站上我应该寻找的文档名称也将是一个巨大的帮助! 谢谢!

桌面屏幕叠加 – 新forms的闪烁问题

作为我的开源DeskPins 克隆的一部分 (两个单独的链接,一个用于原始,一个用于GitHub上的克隆),我需要允许用户与桌面交互。 我认为最简单的方法是打开一个新表单并在其上绘制桌面内容。 然后我应该能够轻松设置鼠标光标并为用户提供关于当前焦点的窗口的视觉提示。 更复杂的替代方法是使用p / invoke到SetSystemCursor并在其他窗口的WM_PAINT事件队列中注入自定义代码(以及可能的其他WinApi相关工作,例如,如果我的程序exception终止,则游标清理将是一个问题)。 我不想这样做。 我下面的代码正在工作,唯一的问题是屏幕闪烁 。 设置DoubleBuffered = true后,它变得更好(而不是屏幕闪烁,它变成了父窗体闪烁 ),但仍然很明显。 所以现在每次打开叠加表单时我的表单都会闪烁。 我能做些什么来使它平稳过渡,就好像新窗口没有打开一样? 有一个“冻结”效果是可以的=任何动画都会被暂停。 public sealed partial class DesktopOverlayForm : Form { public DesktopOverlayForm() { InitializeComponent(); //make full screen //http://stackoverflow.com/a/2176683/897326 Rectangle bounds = Screen.AllScreens .Select(x => x.Bounds) .Aggregate(Rectangle.Union); this.Bounds = bounds; //set desktop overlay image this.BackgroundImage = MakeScreenshot(); } /// /// […]

Graphics.CopyFromScreen返回黑屏

我有一个小应用程序,它采取屏幕截图并将其保存到其中的文件夹。它在大多数情况下工作正常,但在某些情况下,例如在Team Fortress 2中或在OpenGL模式下运行魔兽争霸3时它只返回一个完全黑色(或白色)图像。 有没有人有办法解决这个问题? 我使用的是c#标准: Bitmap bmp; Graphics gfx; bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); gfx = Graphics.FromImage(bmpScreenshot); gfx.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); bmpScreenshot.Save(“image.jpg”, ImageFormat.Jpeg);

CopyFromScreen是获取screenShots的正确方法吗?

我正在创建一个应用程序,它以一定的时间间隔截取桌面的屏幕截图。 代码 : String nme = “”; Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); nme = DateTime.Now.ToString(); printscreen.Save(@”F:\Temp\printScre.jpg”, ImageFormat.Jpeg); CopyFromScreen是获取桌面屏幕截图的正确方法吗? 如果我想将此屏幕截图发送到远程服务器,那么最佳方法应该是什么? 我应该在发送之前进行一些压缩,如果是这样,最有效的方法是什么?