在WPF中高效地平铺图像

时间:2013-12-27 20:19:13

标签: c# wpf xaml

我正试图在WPF中使用自上而下的2d平铺游戏获得基础知识,我有一种感觉,我认为它非常错误。我已经尝试了几种方法在屏幕上显示32x32 .png文件的平铺网格和小网格(例如16x16),它工作正常。如果我使用相同的图像向上移动到64x64网格,则内存消耗是巨大的。使用我目前最好的方法,它接近60MB,重绘它需要几秒钟。此外,重绘会将内存使用量增加20-30MB。我怎样才能更有效地做到这一点?请原谅我的代码;我可以想象它看起来很难看。

class Tile
{
    public int Dimension
    {
        get { return Settings.Default.TileDimensions; }
    }

    public BitmapImage Image { get; set; }

    public Point Location { get; set; }
}

for (int r = 0; r < Rows; r++)
{
    for (int c = 0; c < Columns; c++)
    {                   
        var t = new Tile();
        t.Image = new BitmapImage(new Uri("/AoW;component/Resources/Images/Grass.png", UriKind.Relative));
        t.Location = new Point(c, r);
        Tiles.Add(t);
    }
}

<Canvas Width="{Binding CanvasWidth}"
        Height="{Binding CanvasHeight}">
    <ItemsControl ItemsSource="{Binding Current.Container.Map.Tiles,
                                        Source={StaticResource Locator}}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="{Binding Columns}"
                             Rows="{Binding Rows}" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Image Width="{Binding Dimension}"
                       Height="{Binding Dimension}"
                       RenderOptions.BitmapScalingMode="LowQuality"
                       Source="{Binding Image}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Canvas>

非常感谢任何有关如何正确执行此操作的建议。

0 个答案:

没有答案