【发布时间】:2017-06-07 19:02:51
【问题描述】:
我正在使用 WritableBitmap 在 WPF 中快速绘制二维图形。
问题是,我的 WritableBitmap 与 Image 控件的像素大小不匹配 1:1。当我尝试根据 Image 控件的大小更改事件制作新的 WritableBitmap 时,性能很糟糕。
如何使用 WritableBitmap 以 1:1 呈现 WPF 控件的像素?
您可以看到my code on github 的 WPF 和 Windows.Forms 版本。
该应用程序是一个名为 SoundLevelMonitor 的小型迷你应用程序,它监控应用程序的音频电平并绘制带有图例的连续移动图形。下面是 Windows.Forms 版本的屏幕截图。 WPF 版本基本相同,只是图像是固定大小并拉伸以适合窗口。
在开始使用 WritableBitmap 之前,我尝试使用 UIElement,但绘图性能很糟糕。一个问题是触发重绘需要InvalidateVisual(),这会导致重新布局缓慢。另一个问题是使用 DrawingContext 绘制文本非常慢。
所以我找到了这个suggestion to write to WriteableBitmap using GDI,它实际上运行良好,而且速度非常快。 (WPF 版本感觉比 windows 窗体版本响应更快!)
但是,WriteableBitmap 是一个固定大小的后备存储,WPF 正在按比例放大以适应 Image 控件。我希望 WriteableBitmap 成为控件的 1:1 像素后备存储,即使在调整控件大小时也是如此。
我尝试同时使用OnRender 和LayoutUpdated 来触发创建一个新的大小匹配的WriteableBitmap,但它们都非常慢。可能是因为设置 Image.Source 会触发重新布局。
有什么想法吗?
【问题讨论】:
标签: c# wpf writablebitmap