在WPF应用程序中使用GDI +

时间:2011-03-03 15:15:17

标签: wpf gdi+

我正在用WPF应用程序编写一个模拟生命游戏的程序。 我如何预先形成GDI +,如图形操作,以创建包含单元格网格的图像?

(通常,在WinForms中,我会知道如何进行此操作)。

修改 我用了这段代码:

            WriteableBitmap wb = new WriteableBitmap(width * 5, height * 5, 100, 100, new PixelFormat(), new BitmapPalette(new List<Color> { Color.FromArgb(255, 255, 0, 0) }));
        wb.WritePixels(new Int32Rect(0, 0, 5, 5), new IntPtr(), 3, 3);
        Background.Source = wb;

背景是System.Windows.Controls.Image控件

2 个答案:

答案 0 :(得分:2)

您可以使用WriteableBitmap或使用WPF容器,例如Grid或Canvas,其中包含许多矩形。很大程度上取决于游戏板的大小。 WriteableBitmap可能更适合于大型地图,对于较小的尺寸,画布或网格可能更容易。

Is this what you are looking for?

答案 1 :(得分:1)

我认为你使用WriteableBitmap.WritePixel让自己变得更难。使用Shapes或使用RendterTargetBitmap和DeviceContext绘制时间会更好。

以下是一些关于如何使用此方法绘制的代码。

MainForm的XAML:

<Grid>
    <Image Name="Background"
           Width="200"
           Height="200"
           VerticalAlignment="Center"
           HorizontalAlignment="Center" />
</Grid>

MainForm的代码背后:

private RenderTargetBitmap buffer;
private DrawingVisual drawingVisual = new DrawingVisual();

public MainWindow()
{
    InitializeComponent();            
}

protected override void OnRender(DrawingContext drawingContext)
{
    base.OnRender(drawingContext);
    buffer = new RenderTargetBitmap((int)Background.Width, (int)Background.Height, 96, 96, PixelFormats.Pbgra32);
    Background.Source = buffer;
    DrawStuff();
}

private void DrawStuff()
{
    if (buffer == null)
        return;

    using (DrawingContext drawingContext = drawingVisual.RenderOpen())
    {
        drawingContext.DrawRectangle(new SolidColorBrush(Colors.Red), null, new Rect(0, 0, 10, 10));
    }

    buffer.Render(drawingVisual);
}

将图像的宽度/高度调整为您想要的任何值。所有绘图逻辑都应该在using语句中。您会发现DrawingContext上的方法比WritePixel更灵活,更容易理解。只要你想触发重绘,就调用“DrawStuff”。