小编Luk*_*asH的帖子

TypeScript类型化函数参数接受任何

这是一个可以很好编译的TypeScript代码片段(使用1.5.3)。

function alertNumber(a: number) {
    alert(a + 1);
}
var x:any = "string";
alertNumber(x);
Run Code Online (Sandbox Code Playgroud)

如何用type的参数调用某个类型的参数请求函数any

typescript

6
推荐指数
1
解决办法
1209
查看次数

将现有图形转换为位图

我正在为交易软件(C#、w​​informs、.NET 3.5)编写一个插件,我想在面板(比方说ChartPanel)上绘制十字光标,其中包含绘制成本可能很高的数据。到目前为止我所做的是:

  1. CursorControl我在面板中 添加了一个
    • CursorControl位于主绘图面板上方,以便覆盖整个区域
    • 这样Enabled = false所有输入事件都会传递给父级 ChartPanel
    • 它的Paint方法被实现,以便它在当前鼠标位置从上到下、从左到右绘制线条
  2. 当 MouseMove 事件被触发时,我有两种可能性:
    • A) Call ChartPanel.Invalidate(),但正如我所说,底层数据的绘制成本可能很高,这会导致每次我移动鼠标时所有内容都重新绘制,这是错误的(但这是我现在可以完成这项工作的唯一方法)
    • B)调用CursorControl.Invalidate()并在绘制光标之前,我会拍摄当前绘制的数据的快照并将其保留为光标的背景,每次需要重新绘制光标时都会恢复该背景...问题是...我不知道该怎么做

2.B. 意思是:

  • 将现有Graphics对象变成Bitmap(它(图形)是通过 Paint 方法给我的,我必须在它上面绘画,所以我无法创建一个新的 Graphics 对象......也许我弄错了,但这就是我的方式明白它)
  • 在绘制十字线之前,从位图中恢复图形内容并重新绘制十字线

我无法控制绘制昂贵数据的过程。我可以访问CursorControl通过 API 调用的我的方法和它的方法。

那么有没有办法将现有的Graphic内容存储到Bitmap中并在以后恢复呢?或者有没有更好的方法来解决这个问题?


已解决:经过几个小时的反复试验,我想出了一个可行的解决方案。我使用的软件有很多问题不能笼统讨论,但主要原理很清楚:

  • 已绘制内容的现有图形无法直接转换为位图,而是我必须使用panel.DrawToBitmap@Gusman 的答案中首先提到的方法。我知道,我想避免,但最后我不得不接受,因为这似乎是唯一的办法
  • 我还想避免每一帧的双重绘制,因此第一个十字准线油漆总是直接绘制到ChartPanel. 鼠标移动而不更改图表图像后,我会进行快照显示DrawToBitmap并按照所选答案中的描述进行操作。
  • 该控件必须是不透明的(未启用透明背景),以便刷新它不会在其父控件上调用 Paint(这将导致整个图表重新绘制)

我仍然每隔几秒钟左右就会偶尔遇到闪烁,但我想我可以以某种方式解决这个问题。虽然我选择了Gusman的答案,但我要感谢所有参与的人,因为我使用了其他答案中提到的许多其他技巧,例如Panel.BackgroundImage、使用Plot()方法而不是Paint()来锁定图像等。

.net c# bitmap winforms

2
推荐指数
1
解决办法
1931
查看次数

标签 统计

.net ×1

bitmap ×1

c# ×1

typescript ×1

winforms ×1