【问题标题】:WPF performance on scaling a large scene缩放大型场景时的 WPF 性能
【发布时间】:2010-03-11 23:59:52
【问题描述】:

我有一个全屏应用,我希望能够放大某些区域。

我的代码运行良好,但我注意到,当我靠近时,放大动画(在父画布上为 ScaleTransform.ScaleXScaleTransform.ScaleY 属性设置动画)开始稍微向下移动,并且框架率受到影响。

我没有使用任何 BitmapEffects 或任何东西,理想情况下,我希望我的场景变得比现在更复杂。

场景很大,1980x1024,这个是要求,不能改。

目前的布局是这样的:

<Canvas x:name="LayoutRoot">
  <Canvas x:Name="ContainerCanvas">
    <local:MyControl x:Name="c1" />
    <!-- numerous or ther controls and elements that compose the scene  -->
  </Canvas>
</Canvas>

放大的代码只是为 ContainerCanvas 的 RenderTransform 设置动画,最后,它会缩放其子级,从而产生所需的效果。

但是,我想知道是否需要将 ContainerCanvas 换成 ViewBox 或类似的东西?我之前在 WPF 中从未真正使用过 ViewBox/Viewport 控件,他们甚至可以在这里帮助我吗?

平滑缩放是客户的一项巨大要求,我必须解决这个问题。

欢迎所有想法

非常感谢

标记

【问题讨论】:

    标签: wpf performance scaling


    【解决方案1】:

    我发现双色调图像存在类似问题,需要缩放和平滑平移,但需要对双色调进行抗锯齿处理才能使屏幕观看可接受。

    显然,这种抗锯齿会导致性能问题。您是否使用过 RenderOptions.SetBitmapScalingMode() 来显示您正在显示的图像对象?
    如果是这样,您可能必须在缩放动画的速度/性能和渲染图像的质量之间进行权衡。

    我曾想过但还没有时间实施的一种可能的解决方案是在动画期间切换到低质量的位图缩放模式,并在动画结束时切换回高质量的位图。

    【讨论】:

    • 实际上我们根本没有使用图像,我们屏幕上的所有内容都是用户控件,其中包含基于标准矢量的形状,如矩形、椭圆等......(但有很多渐变填充我认为这不应该是一个问题)
    • 好的。这个问题听起来很相似。归根结底,它是一个容器上的 RenderTransform,里面有东西。您是否发现,如果您在同一区域放大、缩小和返回,第二次缩放会更平滑?
    • 尚未实现重新缩放 :) 我会尽快通知您,我怀疑它会更平滑
    • 实际上,即使在一次又一次放大和缩小之后,它仍然表现不佳,没有任何改进。所以不是它第一次加载资源(尽管这仍然可能是真的),而是整个场景的扩展速度很慢......
    • 减少场景中的组件数量会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多