/// <summary> /// Draws a normal line with a desired stroke thickness /// <param name="bmp">The WriteableBitmap.</param> /// <param name="x1">The x-coordinate of the start point.</param> /// <param name="y1">The y-coordinate of the start point.</param> /// <param name="x2">The x-coordinate of the end point.</param> /// <param name="y2">The y-coordinate of the end point.</param> /// <param name="color">The color for the line.</param> /// <param name="strokeThickness">The stroke thickness of the line.</param> /// </summary> public static void DrawLineCustom(this WriteableBitmap bmp, int x1, int y1, int x2, int y2, Color color, int strokeThickness, Rect?clipRect = null) { int intColor = ((color.A << 24) | (color.R << 16) | (color.G << 8) | color.B); using (var context = bmp.GetBitmapContext()) { CustomWidthLine(bmp.PixelWidth, bmp.PixelHeight, context, x1, y1, x2, y2, strokeThickness, intColor, clipRect); } }
void InitGame(string gameTxt) { playField = new SokowahnField(gameTxt); undoList.Clear(); undoList.Push(playField.GetGameState()); drawField = new SokowahnField(playField); for (int i = 0; i < drawField.fieldData.Length; i++) drawField.fieldData[i] = '-'; int width = playField.width * BoxPixelWidth * Multi; int height = playField.height * BoxPixelHeight * Multi + 1; viewImage = new WriteableBitmap(width, height); viewContext = viewImage.GetBitmapContext(); GameImage.Source = viewImage; UpdateScreen(playField); }
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 }