2013-04-09 57 views
1

必須由具有數據的像素(大)繪製。我怎樣才能做到這一點?如何以像素爲單位在WPF中繪製

我嘗試了一個畫布和矩形 - 電腦掛上了自己... 試過下面的選項(DrawingContext) - 電腦仍然掛着自己,但少一點。

請推薦計算機負載最少的選項。 int width = 800; - 數組的大小(大!) int size = 1; - 希望能夠使片段不僅僅是一個而是幾個像素

protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
     { 
      Random rnd = new Random(); 
      int width = 800; 
      int size = 1; 
      CellType[,] types = new CellType[width, width]; 
      for (int i = 0; i < width; i++) 
      { 
       for (int j = 0; j < width; j++) 
       { 
        int r = rnd.Next(0, 100); 
        if (r >= 70) types[j,i] = CellType.IsOccupied; 
        else types[j, i] = CellType.IsEmpty; 
       } 
      } 


      for (int i = 0; i < width; i++) 
      { 
       for (int j = 0; j < width; j++) 
       { 
        Brush brush = Brushes.Black; 

        switch (types[j, i]) 
        { 
         case CellType.IsEmpty: brush = Brushes.Green; 
          break; 
         case CellType.IsOccupied: brush = Brushes.Black; 
          break; 
        } 

        drawingContext.DrawRectangle(brush, 
        new Pen(brush, 1), 
        new Rect(j * size, i * size, size, size)); 
       } 
      } 

      base.OnRender(drawingContext); 
     } 
+1

首先,移動筆退出循環;每筆可以使用一支筆。 __凍結每支筆___。我也強烈建議你看'InteropBitmap'並手動設置字節。 – 2013-04-09 08:58:54

+0

查看[WriteableBitmap](http://msdn.microsoft.com/zh-cn/library/system.windows.media.imaging.writeablebitmap.aspx)並將其用於直接繪製。您也可以使用Direct2D(僅適用於Vista及以上版本)或使用Direct3D。 – dowhilefor 2013-04-09 09:11:50

回答

1

它會凍結多長時間?幾年前,我在Silverlight中做了一些非常類似的事情。這有點慢,但仍然可以接受。嘗試使用帶有SetPixel或FillRectangle方法的WriteableBitmap,但請記住,在循環中逐像素繪製總是需要一些時間。

忘了提SetPixel和FillRectangle可能需要WriteableBitmapEx,可在這裏: http://writeablebitmapex.codeplex.com/

+0

完美工作。但不能改變「刷子」的大小。 Int32Rect rect = new Int32Rect(j * size,i * size,size,size); wb.WritePixels(矩形,筆[(int)類型[j,i]],大小* 10,0);如果大小大於1,我就沒有圖像。 – Grenkin 2013-04-09 10:02:46

+0

我不能幫你解決這個問題。我想這可能是與「步幅」參數有關的問題。試試這篇文章(http://stackoverflow.com/questions/13953735/calculating-the-required-buffer-size-for-the-writeablebitmap-writepixels-method) – 2013-04-09 13:18:14