コード例 #1
0
ファイル: DrawTable.cs プロジェクト: Zaharatot/PixelZEngine
 /// <summary>
 /// Инициализируем контролл отрисовки примитивов
 /// </summary>
 private void initRazor()
 {
     //Инициализируем
     razor = new RazorPainterWFCtl();
     //Проставляем заполнение
     razor.Dock = DockStyle.Fill;
     //Добавляем его на наш основной контролл
     this.Controls.Add(razor);
 }
コード例 #2
0
ファイル: ScreenAnts.cs プロジェクト: patonic/winAnts
            public void magic(ref RazorPainterWFCtl image, int count = 1)
            {
                unsafe
                {
                    int        width      = image.Width;
                    int        height     = image.Height;
                    BitmapData bitmapData = image.RazorBMP.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, image.RazorBMP.PixelFormat);

                    int   bytesPerPixel  = System.Drawing.Bitmap.GetPixelFormatSize(image.RazorBMP.PixelFormat) / 8;
                    int   heightInPixels = bitmapData.Height;
                    int   widthInBytes   = bitmapData.Width * bytesPerPixel;
                    byte *PtrFirstPixel  = (byte *)bitmapData.Scan0;

                    for (int magicCount = 0; magicCount < count; magicCount++)
                    {
                        #region обработка

                        Parallel.For(0, ants.Length / 100 + 1, (int outerI) =>
                        {
                            for (int currI = outerI * 100; currI < (outerI + 1) * 100 && currI < ants.Length; currI++)
                            {
                                byte *currentLine = PtrFirstPixel + (ants[currI].y * bitmapData.Stride);
                                int x             = ants[currI].x * bytesPerPixel;

                                color min = color.blue;
                                color max = color.blue;

                                for (int i = 1; i < 3; i++)
                                {
                                    if (currentLine[x + (int)min] > currentLine[x + i])
                                    {
                                        min = (color)i;
                                    }
                                    if (currentLine[x + (int)max] < currentLine[x + i])
                                    {
                                        max = (color)i;
                                    }
                                }

                                if (max == ants[currI].color)
                                {
                                    byte swap = currentLine[x + (int)max];
                                    currentLine[x + (int)max] = currentLine[x + (int)min];
                                    currentLine[x + (int)min] = swap;

                                    switch (ants[currI].direction)
                                    {
                                    case direction.up:
                                        ants[currI].direction = direction.left;
                                        ants[currI].x--;
                                        break;

                                    case direction.right:
                                        ants[currI].direction = direction.up;
                                        ants[currI].y--;
                                        break;

                                    case direction.down:
                                        ants[currI].direction = direction.right;
                                        ants[currI].x++;
                                        break;

                                    case direction.left:
                                        ants[currI].direction = direction.down;
                                        ants[currI].y++;
                                        break;
                                    }
                                }
                                else
                                {
                                    byte swap = currentLine[x + (int)ants[currI].color];
                                    currentLine[x + (int)ants[currI].color] = currentLine[x + (int)max];
                                    currentLine[x + (int)max] = swap;

                                    switch (ants[currI].direction)
                                    {
                                    case direction.up:
                                        ants[currI].direction = direction.right;
                                        ants[currI].x++;
                                        break;

                                    case direction.right:
                                        ants[currI].direction = direction.down;
                                        ants[currI].y++;
                                        break;

                                    case direction.down:
                                        ants[currI].direction = direction.left;
                                        ants[currI].x--;
                                        break;

                                    case direction.left:
                                        ants[currI].direction = direction.up;
                                        ants[currI].y--;
                                        break;
                                    }
                                }
                                if (ants[currI].x < 0)
                                {
                                    ants[currI].x = width - 1;
                                }
                                if (ants[currI].x >= width)
                                {
                                    ants[currI].x = 0;
                                }
                                if (ants[currI].y < 0)
                                {
                                    ants[currI].y = height - 1;
                                }
                                if (ants[currI].y >= height)
                                {
                                    ants[currI].y = 0;
                                }
                            }
                        });

                        #endregion обработка
                    }

                    image.RazorBMP.UnlockBits(bitmapData);
                }
            }