我想制作一个控件作为时间标尺,用于声音wav文件的波形,如电影制作人或camtasia工作室视频编辑器
问题是持续时间很长,如何渲染所有这些?一次或当用户滚动到一个点时,如果它没有渲染我将渲染它?它全部渲染后会发生什么?这将是如此长的用户将放大等等如何做而不影响性能
答案 0 :(得分:1)
如果你正在处理一个大图像和大量数据,我会想到这个:
在保存在内存中的图像中渲染整个图像后,任何滚动和/或缩放都只是为了定位显示窗口。
以unzoomed缩放比例将图像渲染为Bitmap对象。当你需要显示if的一部分时,使用Bitmap.Clone将该位图的部分复制到显示给用户的图片中。有点困难的部分是呈现当前要求查看的基本位图的一部分。
这可能是对内存的要求。它实际上是一种缓存机制,并且像往常一样,通过使用更多内存来获得速度。
类似于Google地图的工作方式。
答案 1 :(得分:1)
我们不知道你如何渲染你的图形,但我认为你使用不安全的锁定位直接生成一个位图。正如Maciej所说,只需渲染你需要显示的部分 - 当放大时,再次渲染(应该很快)。您可以通过在后台渲染当前,放大1,缩小1,左1/2屏幕,右半屏等等来抢占,但是您需要管理这些(当然可以使用背景并行渲染它们工人线程)。内存的关键是将位图保持在最小(你有图形和渲染器的算法),速度的关键是保持低水平并预取你能做的和并行性。