Пример #1
0
        /// <summary>
        /// Rotiert einen bestimmten Bereich einer Bitmap nach links und
        /// </summary>
        /// <param name="InitHeight">Die Y Höhe ab der die Zeilen verschoben werden</param>
        /// <param name="Bandwidth">Wie viele Zeilen verschoben werden sollen</param>
        /// <param name="Moving">Um wie viele Pixel die Bitmap nach links verschoben werden soll</param>
        /// <param name="ImageToOverwrite">Die Bitmap die verschoben werden soll</param>
        /// <param name="Direction">Die Richtung in die sich der ausgewählte Teil bewegen soll</param>
        /// <returns>Die neue Bitmap mit der entsprechend verschobenen Linien</returns>
        public static Bitmap MoveLine(int InitHeight, int Bandwidth, int Moving, Bitmap ImageToOverwrite, Orientation Direction)
        {
            FastBitmap BM = new FastBitmap(ImageToOverwrite);

            if (Moving == 0 || Bandwidth == 0)  // \ Wenn der zu verschiebende Streifen keine Breite hat
            {
                return(BM);                     // / oder um keine Pixel verschoben werden soll, kann das Originalbild zurückgegeben werden.
            }
            if (Moving < 0)                     // \
            {                                   //  | Wenn um eine negative Anzahl von Pixel verschoben werden soll,
                Moving    = Math.Abs(Moving);   //  | dann wird die Richtung einfach umgekehrt und die Pixel positive.
                Direction = Invert[Direction];  //  |
            }                                   // /

            // Left & Right
            if ((int)Direction % 2 == 1)
            {
                if (Moving == BM.Width)
                {
                    return(BM);
                }
                Moving = Moving % BM.Width;

                if (Direction == Orientation.Right)
                {
                    Moving = BM.Width - Moving;
                }

                //Erstellt ein 2D Farben Array, das Entsprechend der zu verschiebenden Breite hoch und ensprechend der Bitmap breit ist.
                Color[,] Arr = new Color[Bandwidth, BM.Width];

                //Die Schleife wird durchlaufen und schreibt die einzelnen Pixel in das Array.
                //Sie beginnt an dem angegeben Beginwert und endet nachdem der Beginwert + Breite überschritten sind, oder das Ende des Bildes erreicht wurde.
                for (int j = InitHeight; j < Bandwidth + InitHeight && j < BM.Height; j++)
                {
                    //Verschachtelte Schleife, damit die ganze Zeile bearbeitet wird.
                    for (int i = 0; i < BM.Width; i++)
                    {
                        Arr[j - InitHeight, i] = BM.GetPixel(i, j); //Schreibt die Pixel farben an der Momentanen Stelle ins Array.
                    }
                }
                //Für das Array muss noch der BeginWert vom Zähler abgezogen werden.

                FastBitmap N_BM = new FastBitmap(BM);   //Erstellt eine Copie der Bitmap

                //Die Schleife ist gleich aufgesetzt wie die Vorherige. Die verschachtelte Schleife auch
                for (int j = InitHeight; j < Bandwidth + InitHeight && j < BM.Height; j++)
                {
                    for (int i = 0; i < N_BM.Width; i++)
                    {
                        //Färbt die Pixel der neuen Bitmap ein. Die erste Variable muss wieder der Beginwert subtrahiert werden.
                        //Für die zweite Variable, wird der Wert, um den der Bereich verschoben werden soll addiert, und mit der Breite "Modolosiert"
                        N_BM.SetPixel(i, j, Arr[j - InitHeight, (i + Moving) % N_BM.Width]);
                    }
                }

                return(N_BM);
            }
            //Default: Hoch
            else
            {
                if (Moving == BM.Height)
                {
                    return(BM);
                }
                Moving = Moving % BM.Height;

                if (Direction == Orientation.Down)
                {
                    Moving = BM.Height - Moving;
                }

                //Erstellt ein 2D Farben Array, das Entsprechend der zu verschiebenden Breite hoch und ensprechend der Bitmap breit ist.
                Color[,] Arr = new Color[Bandwidth, BM.Width];

                //Die Schleife wird durchlaufen und schreibt die einzelnen Pixel in das Array.
                //Sie beginnt an dem angegeben Beginwert und endet nachdem der Beginwert + Breite überschritten sind, oder das Ende des Bildes erreicht wurde.
                for (int j = InitHeight + Moving, k = 0; k < Bandwidth; j++, k++)
                {
                    //Verschachtelte Schleife, damit die ganze Zeile bearbeitet wird.
                    for (int i = 0; i < BM.Width; i++)
                    {
                        Arr[k, i] = BM.GetPixel(i, j % BM.Height); //Schreibt die Pixel farben an der Momentanen Stelle ins Array.
                    }
                }
                //Für das Array muss noch der BeginWert vom Zähler abgezogen werden.

                FastBitmap N_BM = new FastBitmap(BM);   //Erstellt eine Copie der Bitmap

                //Die Schleife ist gleich aufgesetzt wie die Vorherige. Die verschachtelte Schleife auch
                for (int j = InitHeight; j < Bandwidth + InitHeight && j < BM.Height; j++)
                {
                    for (int i = 0; i < N_BM.Width; i++)
                    {
                        //Färbt die Pixel der neuen Bitmap ein. Die erste Variable muss wieder der Beginwert subtrahiert werden.
                        //Für die zweite Variable, wird der Wert, um den der Bereich verschoben werden soll addiert, und mit der Breite "Modolosiert"
                        N_BM.SetPixel(i, j, Arr[j - InitHeight, i]);
                    }
                }

                return(N_BM);
            }
        }
Пример #2
0
 public FastBitmap(FastBitmap baseImage) : this(new Bitmap(baseImage))
 {
     baseImage.LockBits();
 }
Пример #3
0
        private void RunPropperImageFilter()
        {
            Bitmap Mask  = new Bitmap(pcbOriginal.Image, new Size(256, HDMA.Scanlines));
            float  Value = (float)trbBlackWhite.Value / 10f;

            switch ((ImageType)cmbImage_Type.SelectedItem)
            {
            case ImageType.Outline:

                FastBitmap   OutlineMask = new FastBitmap(Mask);
                OutlineStart start       = 0;

                if (chbImage_TopLeft.Checked)
                {
                    start |= OutlineStart.TopLeft;
                }
                if (chbImage_TopRight.Checked)
                {
                    start |= OutlineStart.TopRight;
                }
                if (chbImage_BottomLeft.Checked)
                {
                    start |= OutlineStart.BottomLeft;
                }
                if (chbImage_BottomRight.Checked)
                {
                    start |= OutlineStart.BottomRight;
                }
                OutlineMask.Outline(start, trbBlackWhite.Value);
                Value = 1f;

                Mask = OutlineMask;
                goto case ImageType.Transparent;

            case ImageType.Transparent:
                FastBitmap FastMask  = new FastBitmap(Mask);
                FastBitmap BlackBase = new FastBitmap(EffectClasses.BitmapEffects.FromColor(Color.Black, 256, 224));
                for (int y = 0; y < 224; y++)
                {
                    for (int x = 0; x < 256; x++)
                    {
                        if (FastMask.GetPixel(x, y).A <= (255 - (Value * 255f)))
                        {
                            BlackBase.SetPixel(x, y, Color.White);
                        }
                    }
                }
                if (chbImage_Invert.Checked)
                {
                    pcbAfter.Image = ((Bitmap)BlackBase).Invert();
                }
                else
                {
                    pcbAfter.Image = ((Bitmap)BlackBase);
                }
                break;

            case ImageType.Color:
                if (chbImage_Invert.Checked)
                {
                    pcbAfter.Image = Mask.BlackWhite(Value).Invert();
                }
                else
                {
                    pcbAfter.Image = Mask.BlackWhite(Value);
                }
                break;
            }



            UpdateMulti();
        }