/// <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);
            }
        }
예제 #2
0
    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);
    }
예제 #3
0
        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
        }