private void MakeBitmap() { if ((ActualWidth < 1) || (ActualHeight < 1)) { return; } if (WbImageData == null) { return; } _writeableBmp = BitmapFactory.New((int)WbImageData.Width, (int)WbImageData.Height); RootImage.Source = _writeableBmp; using (_writeableBmp.GetBitmapContext()) { XFactor = ActualWidth / WbImageData.BoundingRect.Width(); YFactor = ActualHeight / WbImageData.BoundingRect.Height(); foreach (var plotRectangle in WbImageData.FilledRectangles) { _writeableBmp.FillRectangle( XWindow(plotRectangle.X, WbImageData.BoundingRect.Left), YWindow(plotRectangle.Y, ActualHeight, WbImageData.BoundingRect.Bottom), XWindow(plotRectangle.X + plotRectangle.Width, WbImageData.BoundingRect.Left), YWindow(plotRectangle.Y + plotRectangle.Height, ActualHeight, WbImageData.BoundingRect.Bottom), plotRectangle.Val ); } foreach (var plotRectangle in WbImageData.OpenRectangles) { _writeableBmp.DrawRectangle( XWindow(plotRectangle.X, WbImageData.BoundingRect.Left), YWindow(plotRectangle.Y, ActualHeight, WbImageData.BoundingRect.Bottom), XWindow(plotRectangle.X + plotRectangle.Width, WbImageData.BoundingRect.Left), YWindow(plotRectangle.Y + plotRectangle.Height, ActualHeight, WbImageData.BoundingRect.Bottom), plotRectangle.Val ); } foreach (var plotLine in WbImageData.PlotLines) { _writeableBmp.DrawLineAa( XWindow(plotLine.X1, WbImageData.BoundingRect.Left), YWindow(plotLine.Y1, ActualHeight, WbImageData.BoundingRect.Bottom), XWindow(plotLine.X2, WbImageData.BoundingRect.Left), YWindow(plotLine.Y2, ActualHeight, WbImageData.BoundingRect.Bottom), plotLine.Val ); } foreach (var plotPoint in WbImageData.PlotPoints) { _writeableBmp.FillRectangle( XWindow(plotPoint.X, WbImageData.BoundingRect.Left), YWindow(plotPoint.Y, ActualHeight, WbImageData.BoundingRect.Bottom), XWindow(plotPoint.X + 1, WbImageData.BoundingRect.Left), YWindow(plotPoint.Y + 1, ActualHeight, WbImageData.BoundingRect.Bottom), plotPoint.Val ); } } // Invalidates on exit of using block }