问题标签 [drawtobitmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
897 浏览

c# - 网络浏览器疯狂

编辑:最初的问题是一个很长的问题,有很多疯狂的猜测。我已经把它切回了剩下的谜团。

我现在整天都在挣扎和困惑,我想我应该向社区提出我的问题。

它起源于帖子中称为Screenshot 的方法生成黑色图像。原始发帖人希望每隔 n 秒连续截取他的程序的屏幕截图,其中包括一个 WebBrowser,即使用户已注销

当用户注销时,他不再有屏幕。因此,任何读取屏幕的尝试都将失败。如果使用窗口句柄,结果是一个黑框,使用 CopyFromScreen 时会出现 GDI 错误异常。

但是程序窗口仍然存在,DrawToBitmap即使用户注销也可以正常使用。

以下是条件和剩余问题:

  • 用户不得WebBrowser以任何方式触摸/单击。如果他这样做,比如说,滚动、单击、导航子DrawToBitmap调用会导致一个空框。

  • 虽然WebBrowser保持不变,但Refresh在下一次 DrawToBitmap 调用之前执行一次就足够了。

  • 触摸它后,需要通过执行重新加载 URL webBrowser1.Url = new Uri(URLpath);

  • 导航时必须存储新的 URL 才能执行此操作。我在导航事件中这样做。

  • 无论如何,DrawToBitmap如果网页包含<input type="text" ..> field.

  • DocumentText通过用 a破坏Replace("<input", "<in_put");可以治愈,但如果没有进一步的技巧,这将丢失 CSS 表..

测试它抛出两个Buttons, a Label, a Timer, a Combobox and a WebBrowser on a Form并复制代码;将文件路径更改为适合您的设置和观看的文件夹..:

我现在几乎可以自由地导航,并且屏幕抓取继续工作——除了带有文本输入字段的页面,例如用户标签页面。

我想知道是否anybdoy可以复制..?

或者解释一下??

还是我毕竟只是在“猎鬼”而事情根本不可靠???

最终编辑:

虽然得到解释会很好,但获得一个可行的解决方案可能必须足够好。OP 找到了使用PrintWindow调用user32.dll并解决所有问题的代码。它在注销时工作,Refreshing即使在点击WebBrowser并刮掉所有页面后也能工作,包括那些带有文本输入字段的页面。这是我的版本:

这可以捕获带或不带边框的表单或控件。

0 投票
0 回答
613 浏览

vb.net - DrawToBitmap:临时缩放控件

我正在使用 DrawToBitmap 生成 WinForms 控件的 snapshop,并为用户提供了生成不同大小的图像的选项。我调整控件大小的代码是

大多数情况下,这可以正常工作,但存在控件的大小可以被其父容器覆盖的问题。我正在使用 TableLayoutPanels 可以防止控件被正确缩放。

我还没有遇到但可能发生的另一个问题是,可以通过临时重置.Dock属性来打乱表单的停靠顺序。

有没有其他方法可以缩放一个绘制事件的控件?

之后我可以缩放位图,但这会使图像模糊。创建具有相同属性的临时新控件也不是一种选择,因为该控件相当复杂。

0 投票
1 回答
1996 浏览

c# - c# winform DrawToBitmap offscreen

如果它比您的显示器大,是否有任何方法可以屏幕抓取 Windows 窗体控件?

例如,我的 winform 是 3000px x 3000px

显示器是 1080p

屏幕截图总是受限于我的显示器尺寸。是否有解决方法来呈现您的应用程序,即使它不在您的屏幕上?

0 投票
3 回答
1537 浏览

c# - DrawToBitmap 从 UserControl 返回黑色图像

我在这里的第一篇文章,所以这里是,

我有一个包含大约 30 个控件(标签、文本框等)的 UserControl。现在我想做一个“截图”。所以我使用了 UserControl 中的“DrawToBitmap”方法。

这里有一些示例代码

如果我运行此代码,它会一直返回给我一个黑色图像。我不知道为什么。请帮忙!

编辑:

忘了说 UserControl 是 WinForms UserControl

0 投票
2 回答
1113 浏览

c# - WebBrowser.DrawToBitmap() 不呈现图像

我陷入了一个奇怪的境地,找不到原因或解决办法。我有一个从 HTML 内容创建 jpg 图像的实用程序。它使用 WebBrowser.Navigate(url) 和 WebBrowser.DrawToBitmap() 方法。

该实用程序已在其服务器上的不同客户端运行了一年或更长时间。现在,其中一个直到几周前才能获得所需的图像,却得到了奇怪的图像。该图像仅显示了我传递给 Navigate() 方法的 URL。我可以从本地机器上的相同 URL 呈现正确的图像。我检查了对象的 DocumentText 属性,内容在那里,所有宽度和高度都正常,任何地方都没有产生错误。只有图像没有任何意义。它与 HTML 内容无关,并且对所有页面执行相同的行为。

有谁知道什么可以改变导致这个问题发生?尽管他们最近从 Server 2008 升级到了 2012,但他们声称此渲染在升级之前已停止。我的代码没有被触及。该项目使用 C# 和 .NET 4.0 构建。

任何帮助或意见表示赞赏。贝扎德

0 投票
0 回答
271 浏览

c# - Control.DrawToBitmap 给出错误代码 253

我的应用程序使用带有 gecko webbrowser 的 winform,当我尝试绘制位图时,它给出了错误代码 253,并且没有任何其他错误,即使我已经“尝试捕获”。

注意:我使用 vs 2015 社区

这是我的代码:

编辑注意:之前,我认为这是壁虎的问题,但似乎我也不能用其他控件做任何 drawtobitmap,所以我想这与 memory.read 来自下面@HansPassant 的答案有关

0 投票
1 回答
2966 浏览

c# - DrawToBitmap 返回空白图像

我在从我的 winform 应用程序中创建位图图像时遇到问题。

情况:

我有一个UserControl名为 " CanvasControl" 的方法,它接受OnPaint充当我的 Draw Pad 应用程序的画布的方法。在此用户控件中,我有一个函数“ PrintCanvas()”,它将创建UserControlPNG 文件的屏幕截图图像。下面是PrintCanvas()函数:

CanvasControl这个用户控件(保存按钮会调出“ PrintCanvas()”的功能UserControl

我得到了预期的输出图像文件,但问题是它是一个空白图像。

到目前为止我已经尝试过:

为了测试这不是语法问题,我尝试将PrintCanvas()函数转移到我的主窗体中,令人惊讶的是,我在文件中获得了整个主窗体的图像,但在UserControl那里不可见。

是否有任何其他设置我错过了使 winformUserControl可打印?

更新:(绘图程序)

  1. 充当画布的用户控件 -此处的代码
0 投票
1 回答
763 浏览

c# - 使用 MigraDoc 将 ZedGraph 转换为 PDF

我目前正在开发一个 C# 应用程序,该应用程序旨在在 pdf 文件中进行一些计算和输出图形。

我使用 Zedgraph 库来绘制图形,例如 graphPane.AddCurve(PointPairList)。现在我尝试通过 MigraDoc 包将这些图表输出到 pdf 文件。

目前,我有一个脚本将 Zedgraph 映射到位图,然后将其粘贴到 pdf 文件上。所以是这样的:

问题是这在 pdf 页面上给了我一个稍微像素化的图像。我需要这张图表质量很高。那么有什么我可以改变以提高质量还是我必须改变我的整个方法来解决这个问题。

非常感谢你。

0 投票
0 回答
32 浏览

c# - 在胜利表格上绘画的drawbitmap

我有一个 Windows 窗体,我需要绘制一些线条和矩形以在窗体上显示形状。我想捕获这些显示的画作以将它们存储在数据库中,我用于捕获的方法是:

但是在捕获图像后只是显示表单背景是空的,有什么问题?

0 投票
3 回答
1248 浏览

c# - 如何使用 Control.DrawToBitmap 将表单呈现为没有装饰(标题栏、边框)的位图?

我有一个表单,其中有一个覆盖控件(透明的灰色背景,白色文本在“Drop here...”和一个图标上),只有在将文件拖到表单上时才可见。通过在其背面绘制控件,然后用透明灰色 (ARGB) 填充,可以使 Overlay 变得透明。该方法在 Overlay 应该位于不是 Form 的 Control 上时效果很好,但是当我Control.DrawToBitmap用来呈现 Form 而不是通常的 Control 时,它也会呈现标题栏和边框。