画布绘制创建System.OutOfMemoryException Win Phone 8

时间:2013-07-04 05:16:16

标签: c# windows-phone-8

我正在开发一个Windows Phone 8应用程序,我使用Rectangle和Lines在放置在ScrollViewer中的Canvas中绘制图形。

但在绘图期间,我在绘制画布时遇到System.OutOfMemoryException(图形可能超过屏幕大小的3倍)

我已将Canvas放置在ScrollViewer中。当我删除ScrollViewer时,问题不会发生,但即使我设置了属性Scrollviwer.HorizontalScrollBarVisibilty = Visible,我也无法滚动画布。

<ScrollViewer Name="MainScrollViewer"  VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch"   HorizontalScrollBarVisibility="Auto" Grid.RowSpan="2" >
    <Canvas x:Name="MainCanvas" HorizontalAlignment="Left"  Tap="OnCanvasTap" >
        <Canvas.RenderTransform>
            <CompositeTransform CenterX="100" CenterY="75" />
        </Canvas.RenderTransform>
    </Canvas>
</ScrollViewer>

我还尝试使用GC.CollectCanvas.Children.Clear()我正在绘画,但即使这样,问题仍然存在。

1 个答案:

答案 0 :(得分:0)

不是在可滚动div中使用大画布来包含所有图形,而是可以使用较小的画布,最佳实际屏幕尺寸(不是图形)的最大值,然后使用平移画布并重新绘制图形。翻译的位置。

最理想的是,如果你有一个巨大的画布,只看到25%,那么另外75%是浪费的内存。

通过将画布用作“窥视孔”并结合翻译,您将在屏幕上获得相同的结果(您可以看到一次可以看到的100%)并且您不必担心您的图形这将由画布自动剪裁。

您可以将翻译附加到鼠标/触摸拖动操作或制作“虚拟”滚动条(如果是首选)。