捕捉屏幕截图时内存不足
你好,我有问题.我有一个设置来捕获WebBrowser控件的屏幕截图: public static class Utilities { public const int SRCCOPY = 13369376; public static Image CaptureScreen() { return CaptureWindow(User32.GetDesktopWindow()); } public static Image CaptureWindow(IntPtr handle) { IntPtr hdcSrc = User32.GetWindowDC(handle); User32.RECT windowRect = new User32.RECT(); User32.GetWindowRect(handle, ref windowRect);
0 2024-04-16
编程技术问答社区
错误:所给路径的格式不被支持
我在做什么错? 我的主要问题是我遇到了一个错误: 错误:不支持给定路径的格式 我想在我已经创建的文件夹下将文件保存在项目本身中:ScreenShots public void TakeScreenShot() { string pth = System.Reflection.Assembly.GetCallingAssembly().CodeBase; string actualPath = pth.Substring(0, pth.LastIndexOf("bin")); string projectPath = new Uri(actualPath).LocalPath; Screenshot ss = ((ITakesScreenshot)_driver).GetScreenshot(); string screenshot = ss.AsBase64EncodedString; byte[] screenshot
0 2024-04-16
编程技术问答社区
屏幕捕捉桌面的目标区域
我正在尝试在C#中重新创建与Windows提供的stipting工具相同功能的winform应用程序.也就是说,允许用户在桌面上拖动矩形并捕获内部的图像. 目前,我只能用鼠标绘制矩形,这在Winform内.谁能指向我如何做的方向,以便我可以在整个桌面中进行操作? 我绘制矩形的代码如下: Rectangle rect; public Form1() { InitializeComponent(); // set the cursor to be a + sign this.Cursor = System.Windows.Forms.Cursors.Cross; this.DoubleBuffered = true; } private void Form1_MouseDown(object sender, MouseEventArgs e) {
0 2024-04-16
编程技术问答社区
在c#中裁剪图像
我有一个图像,当我按下表单上的按钮时,我想裁剪它.我有按下按钮时运行的以下代码,但对图像没有任何作用: try { Image image = Image.FromFile("test.jpg"); Bitmap bmp = new Bitmap(200, 200, PixelFormat.Format24bppRgb); bmp.SetResolution(80, 60); Graphics gfx = Graphics.FromImage(bmp); gfx.SmoothingMode = SmoothingMode.AntiAlias; gfx.InterpolationMode = InterpolationMode.HighQualityBicubic; gfx.PixelOffsetMode = PixelOffsetMode.HighQuality; gfx.DrawImage(image, new Rectangle(0, 0, 2
0 2024-04-16
编程技术问答社区
如何将当前屏幕捕捉为图像?
我想添加用户在我的应用程序中捕获当前屏幕并通过电子邮件发送的功能.我有一个非常非技术用户群,所以我需要尽可能简单.我计划让他们单击一个名为帮助我的菜单项!然后,它将捕获当前的应用程序屏幕,希望作为JPG或PNG捕获,然后打开Outlook并将图像添加为附件. 我正在阅读这篇文章 screencapture 在代码项目上小老,并不是我想要的,所以我想我会检查是否有更好的方法. 我如何开始?是否有图书馆或内置功能足够? 谢谢! 解决方案 您链接的帖子是正确的方法,它们使其变得非常复杂.您将要使用Rectangle bounds = this.Bounds; using(Bitmap ss = new Bitmap(bounds.Width, bounds.Height)) using(Graphics g = Graphics.FromImage(ss)) { g.CopyFromScreen(this.Location, Point.Empty, bounds.S
0 2024-04-15
编程技术问答社区
捕捉虚拟屏幕(所有显示器)
我正在尝试获取整个虚拟屏幕的屏幕截图.这意味着,不仅是主要屏幕的图像,而且是连接到计算机的每个屏幕. 有办法做到这一点吗?我尝试使用它,但它没有用: Bitmap b = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height); Graphics g = Graphics.FromImage(b); this.Size = new Size(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height); g.CopyFromScreen(0, 0, 0, 0, b.Size); 解决方案 文档 :Graphics.CopyFromScreen(Int32, Int32, Int32, Int32, Size):从屏幕到图形的图表的矩形对应于矩形对应的颜色
0 2024-04-15
编程技术问答社区
捕获最小化的远程桌面的屏幕截图
我有以下C#代码,我用它来捕获远程桌面(RDP)会话中的屏幕截图.会话处于活动状态时,它可以正常工作,但是如果我最大程度地减少了会话,则会失败,而无效的手柄异常. 有什么方法可以做这项工作,或者当会话最小化时屏幕实际上是"消失的"? string filename = @"C:\Snap.png"; Size bitmapSize = new Size( Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height ); using (Bitmap bitmap = new Bitmap(bitmapSize.Width, bitmapSize.Height, PixelFormat.Format24bppRgb)) using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen( // Exc
0 2024-04-15
编程技术问答社区
WebBrowser.DrawtoBitmap()为少数网站生成的空白图像始终如一
我一直在我的ASP.NET页面中使用webbrowser.drawtobitmap()在单独的sta thread中运行以捕获Web页面作为图像.但是我发现我始终如一地为几个网站获得空白的图像.我知道该方法没有"正式"支持,但是如果有人可以为我提供任何原因或解决这些空白图像问题的工作,那就太好了. 解决方案 DrawToBitmap有局限性,并且不总是按预期工作.尝试使用本机GDI+ 工作 这是 其他解决方案 可以通过将重点放在控件上来解决此问题,因此它将正确绘制. 这将是一个选项,但是必须可见控制: webbrowser.webbrowser.drawtobitmmap ()或其他方法? 据我所知,问题是在单击WebBrowserControl时修复了它.因此,执行此程序化应该解决问题:) 我尚未对此进行测试,但是从理论上讲,我认为可以在ASP.NET应用程序中启动Windows表单. 引用system.windows.forms和绘图,然后在单独的线
0 2024-04-15
编程技术问答社区
捕捉滚动窗口的内容截图
我需要使用.NET捕获滚动窗口客户端区域的屏幕截图.我的首要任务是捕获网页屏幕截图.但这可能不是唯一的用例.例如,它也可以是记事本的文本区域. 某些应用程序(Faststone Capture,Picpick)可以效仿用户行为,以达到可滚动区域的隐藏部分并捕获它.我正在寻找这样的东西,以获取相同结果的替代方法. 解决方案 我已经继续搜索并创立了Iecapt,这是一种开源工具,可以使用IE内部使用IE进行网页屏幕截图.它具有++和.NET版本.另外,来自同一作者的基于QT/WebKit的模拟: http://cutycapt.sourceforge.net ./p> 此工具不是我问题的直接答案,但是它们俩都解决了90%的原始问题. 其他解决方案 您可以将Windows重定向WM_PAINT,然后使用 wm_print 和wm_printclient.这比屏幕截图更好,因为它确保窗口的遮盖部分(其他窗户后面)都被绘制了.如果您的目标窗口滚动通过滚动子窗口位置,则应适用
0 2024-04-14
编程技术问答社区
如何使用C#和ASP.NET对网页上的div进行截图?
我想从网站上生成的HTML创建动态图像.我有生成PSN奖杯卡,AB Xbox Live Gamer卡,Steam Gamer卡和Xfire游戏机卡的代码.每张卡都放入自己的DIV中,并通过服务器端代码动态构建.有没有办法使用C#和ASP.NET捕获网页上选定的DIV的屏幕截图? 解决方案 如果您需要进行屏幕截图,则需要这样做.因此,您需要使用一些客户端的TECNOLOGY(例如JavaScript,Flash,Silverlight ... ASP.NET运行)在服务器上运行,因此将其排除在外. 这是指向其他相关的一些链接,因此有关使用JavaScript进行屏幕截图的问题 javascript code一个不使用ActiveX的网站 使用javascript进行网页屏幕截图? 其他解决方案 您需要一些页面渲染库或服务. litmus 就是我听说过的一项服务.您可能会从那里开始.
0 2024-04-14
编程技术问答社区
以程序化的方式对部分隐藏的窗口进行截图
是否可以获取不在顶部的窗口的屏幕截图,即,如果它部分被另一个窗口隐藏,而无需将其带到顶部? 解决方案 不幸的是,在C#中进行屏幕截图并不是一件容易的事,您可以根据当前窗口或视口创建图形对象并捕获它,但不是您的要求. 这个 隐藏窗口的屏幕截图 可能会有所帮助,但无论如何您都必须使用Interop代码进行此操作. 我敢说,这不是一个普遍的事情,而是一个程序,一个程序没有任何业务知道另一个程序中显示的内容.这可能是一个令人讨厌的利用. 其他解决方案 您不需要进行屏幕截图,如果是您的应用程序,则可以使用表单对象的Control.DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);. 如果是其他应用程序窗口,则可以尝试未管理的方法来获取窗口的UI.我不记得所有的方法,但我已经尝试过,并且正在奏效.可能GetWindow和SendMesage WM_PRINT / WM_PRINTCLIENT
0 2024-04-14
编程技术问答社区
如何用C#和WebKit.NET捕获完整的网站屏幕截图?
我正在使用 webkit.net 以在我的C#应用​​中集成浏览器组件.问题是我只能使用屏幕快照在浏览器窗口中捕获可见部分.有没有办法捕获整个页面的屏幕截图? 解决方案 似乎通过使用nativemethods.sendmessage可能会搞砸消息队列,您是否可以使用 http://cutycapt.sourceforge.net/或也许/或 http://labs.awesomium.com/捕获with-pages-with-c-net/? 其他解决方案 我改用WebBrowser; ScrollBarsEnabled = false让我捕获整页. 这是一些代码: protected override void Render(HtmlTextWriter writer) { StringBuilder builder = new StringBuilder(); HtmlTextWriter htw = new HtmlT
0 2024-04-13
编程技术问答社区
如何让屏幕截图包括调用的窗口(在XP上)?
我有屏幕截图的代码... Size ssSize; int ssX, ssY, ssWidth, ssHeight; Bitmap thisScreenshot; Graphics gfxScreenshot; public Image Screenshot() { ssX = Screen.PrimaryScreen.Bounds.X; ssY = Screen.PrimaryScreen.Bounds.Y; ssWidth = Screen.PrimaryScreen.Bounds.Width; ssHeight = Screen.PrimaryScreen.Bounds.Height; ssSize = Screen.PrimaryScreen.Bounds.Size; thisScreenshot = new Bitmap(ssWidth,ssHeight); gfxScreenshot = Graphics.FromImage(thisScreenshot); retu
0 2024-04-13
编程技术问答社区
使用C#、WPF和DWM保存一个窗口的屏幕截图
这是一个后续问题,以 上述解决方案使用DWM显示活动窗口的缩略图.如果我正确理解,它可以通过让您指定要查看的应用程序的窗口句柄,然后在该窗口上提供一个窗口句柄和一个位置,其中窗口应绘制目标窗口的内容. . 是否有一种方法可以将窗口屏幕屏幕截图直接拍摄到位图或图像,而不是直接在窗口中的某个地方绘制它? (基本上,只需抓住窗口的屏幕截图(即使被另一个窗口覆盖),没有使用更新的缩略图.) 感谢您的帮助! 解决方案 control.drawTobitMap并不总是可行 公用事业类.致电Utilities.captureWindow(Control.Handle)捕获特定控件: public static class Utilities { public static Image CaptureScreen() { return CaptureWindow(User32.GetDesktopWindow()); }
2 2024-04-12
编程技术问答社区
C# 在应用程序中拍摄.net控件的屏幕照片并附加到Outlook电子邮件中
任何人都知道如何使用C#拍摄屏幕截图并将其限制以拍摄应用程序的特定容器/部分的图片.我不想要应用程序的整个屏幕或整个窗口. 我的面板被简单地称为:面板1 用户将单击一个"按钮",然后获取面板1的屏幕截图并将其附加到电子邮件. 我只想对该部分进行屏幕截图,然后本地保存到C:\ drive和/或附加或嵌入Outlook电子邮件中. 我在互联网上阅读了其他各种内容,但其中大多数必须处理在我不寻找的Web浏览器控件的屏幕截图中创建复杂的更改. 解决方案 如果您只想进入Panel's屏幕截图,则可以使用内置Bitmap bmp = new Bitmap(myPanel.Width, myPanel.Height); myPanel.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); bmp.Save(@"C:\MyPanelImage.bmp"); 只需注意,某些控件可能与此功能无法使用,例如
0 2024-04-12
编程技术问答社区
是否有办法对用户的Windows桌面进行截图?
我想在我的应用程序中为用户提供其桌面的缩放屏幕截图. 有没有办法屏幕截图当前用户的Windows桌面? 我正在用C#写作,但是如果另一种语言有更好的解决方案,我对此表示开放. 要澄清,我需要Windows桌面的屏幕截图 - 仅是墙纸和图标;没有申请或任何重点. 解决方案 您正在寻找还有 对编辑的响应:我误解了您所说的"桌面".如果您想为桌面拍照,则必须: 使用win32api (发送a 消息)首先 拿快照 然后撤消最小化所有(发送MIN_ALL_UNDO消息). 做到这一点的更好方法不是打扰其他窗口,而是直接从桌面窗口复制图像. getDesktopwindow in user32 in user32 桌面.拥有窗口句柄后,获取其设备上下文并将图像复制到新的位图. 有其他解决方案 我给人的印象是,您正在拍摄实际桌面的照片(带有墙纸和图标),而没有其他东西. 1)使用com 在shell32中调用toggledesktop() 2)
0 2024-04-12
编程技术问答社区
截图方法生成黑色图像
未能使用Control.DrawTobitMap在C#中,我的第二个选项是删除桌面的屏幕截图并裁剪所需的部分. 一旦我切换用户帐户,我的打ic出现了,尽管该程序不会崩溃,一旦用户切换,程序仅生成纯黑色图像. 我使用此代码作为参考: webbrowser.webbrowser.drawtobitmap()或其他方法? 我想从逻辑上讲这是有道理的,因为这将有助于Windows节省资源. 我在情况下有哪些选项/解决方案? 编辑1 对测试代码进行了修改: int c = 0; while (true) { try { c++; Rectangle formBounds = this.Bounds; Bitmap bmp = new Bitmap(formBounds.Width,
0 2024-04-12
编程技术问答社区
如何在windows手机上以编程方式进行屏幕截图?
我需要使用Windows Phone拍摄屏幕截图.我不想使用模拟器和Power+启动按钮进行屏幕截图.有什么可以通过编程方式完成的吗? 解决方案 这是代码: private void ApplicationBarScreenshotButton_Click(object sender, EventArgs e) { var fileName = String.Format("MyImage_{0:}.jpg", DateTime.Now.Ticks); WriteableBitmap bmpCurrentScreenImage = new WriteableBitmap((int)this.ActualWidth, (int)this.ActualHeight); bmpCurrentScreenImage.Render(LayoutRoot, new MatrixTransform()); bmpCurrentScreenImage.Inv
0 2024-04-12
编程技术问答社区
创建位图时C#内存不足
我正在创建一个应用程序(Windows表单),该应用程序允许用户根据所选择的位置(拖动到选择区域)进行屏幕截图.我想添加一个放大的"预览窗格",以便用户可以更精确地选择他们想要的区域(较大的像素).在Mousemove事件中,我有以下代码... private void falseDesktop_MouseMove(object sender, MouseEventArgs e) { zoomBox.Image = showZoomBox(e.Location); zoomBox.Invalidate(); bmpCrop.Dispose(); } private Image showZoomBox(Point curLocation) { Point start = new Point(curLocation.X - 50, curLocation.Y - 50); Size
0 2024-04-12
编程技术问答社区
在Windows 10上使用Clipboard.GetImage()后,屏幕截图中的文字被抹去?
这很奇怪: 我最近将工作站从Windows 7升级到Windows10.我有一个聊天客户端,它使用以下代码接受剪贴板的图像: if (Clipboard.ContainsImage()) { BitmapSource source = Clipboard.GetImage(); BitmapFrame frame = BitmapFrame.Create(source); var encoder = new System.Windows.Media.Imaging.PngBitmapEncoder(); encoder.Frames.Add(frame); var stream = new MemoryStream(); encoder.Save(stream); byte[] daten = stream.ToArray(); if (daten !=
0 2024-04-11
编程技术问答社区