C # увеличивать и уменьшать масштаб изображения

#c#

#c#

Вопрос:

Я хочу, чтобы в программе была функция увеличения и уменьшения масштаба. (2x, 4x, 8x) Но я не могу использовать доступную функцию масштабирования.Я должен написать новый.Я выполнил импорт растрового изображения.И я могу получить цвет rgb для каждого пикселя.Я создал матрицы colorR, colorG и colorB для цветов r, g и b.После этого я подумал, что смогу создать увеличенное в 2 раза изображение с помощью SolidBrush на панели.Я нарисую 2 изображения следующим образом:

Исходное изображение (например, 3×3 пикселя) (p = цвет пикселя и «_» для пробела)

р1_р2_р3

p4_p5_p6

p7_p8_p9

увеличенное изображение в 2 раза (6×6 пикселей из-за размера исходного изображения) (p = цвет пикселя исходного изображения и «_» для пробела)

р1_р1_р2_р2_р3_р3

р1_р1_р2_р2_р3_р3

п4_п4_п5_п5_п6_п6

п4_п4_п5_п5_п6_п6

p7_p7_p8_p8_p9_p9

p7_p7_p8_p8_p9_p9

Я написал один цикл, но он не сработал, потому что он полностью неправильный.Итак, как я могу писать для циклов?

     private void button4_Click(object sender, EventArgs e) {
        listBox1.Items.Clear();//insignificant
        listBox2.Items.Clear();//insignificant
        listBox3.Items.Clear();//insignificant

        using (OpenFileDialog dlg = new OpenFileDialog()) {
            dlg.Title = "Open Image";
            dlg.Filter = "*.bmp|*.bmp|*.*|*.*";

            if (dlg.ShowDialog() == DialogResult.OK) {
                pictureBox1.Image = new Bitmap(dlg.FileName);
            }
        }
    }

    private void button1_Click(object sender, EventArgs e) {
        Graphics my2xImage = panel1.CreateGraphics();

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;
        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();

        int[,] colorR = new int[bmpHeight, bmpWidth];
        int[,] colorG = new int[bmpHeight, bmpWidth];
        int[,] colorB = new int[bmpHeight, bmpWidth];



        for (int y = 0; y < bmpHeight; y  ) {
            for (int x = 0; x < bmpWidth; x  ) {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                colorR[x, y] = pixelColor.R;
                colorG[x, y] = pixelColor.G;
                colorB[x, y] = pixelColor.B;

                listBox1.Items.Add("("   (x   1)   ","   (y   1)   ")"   " "   colorR[x, y]);//insignificant
                listBox2.Items.Add("("   (x   1)   ","   (y   1)   ")"   " "   colorG[x, y]);//insignificant
                listBox3.Items.Add("("   (x   1)   ","   (y   1)   ")"   " "   colorB[x, y]);//insignificant

            }

        }



        //for (int y = 0; y < (bmpHeight * 2); y  )
        //{
        //    for (int x = 0; x < (bmpWidth * 2); x  )
        //    {
        //        Color mySpecialColor = Color.FromArgb(colorR[x,y], colorG[x,y], colorB[x,y]);
        //        SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
        //        my2xImage.FillRectangle(pixelBrush, x, y, 1, 1);
        //    }
        //}


    }

    private void button5_Click(object sender, EventArgs e) {

    }

    private void button2_Click(object sender, EventArgs e) {

    }
  

Ответ №1:

Это безумие, но если вам действительно нужно сделать это таким образом, попробуйте что-то вроде этого:

             int dx = x*2;
            int dy = y*2;

            colorR[dx  ,dy  ] = pixelColor.R;
            colorR[dx 1,dy  ] = pixelColor.R;
            colorR[dx  ,dy 1] = pixelColor.R;
            colorR[dx 1,dy 1] = pixelColor.R;

            colorG[dx  ,dy  ] = pixelColor.G;
            colorG[dx 1,dy  ] = pixelColor.G;
            colorG[dx  ,dy 1] = pixelColor.G;
            colorG[dx 1,dy 1] = pixelColor.G;

            colorB[dx  ,dy  ] = pixelColor.B;
            colorB[dx 1,dy  ] = pixelColor.B;
            colorB[dx  ,dy 1] = pixelColor.B;
            colorB[dx 1,dy 1] = pixelColor.B;
  

Комментарии:

1. Я попробовал ваш путь. Но это не сработало. Я думаю, что он перезаписывает матрицу. Таким образом, нарисованная копия изображения первого изображения и остальные пиксели черные. Точно так же: ссылка

2. Если связанное изображение — это то, что вы сделали, значит, вы не пробовали мой путь. Вы попробовали какой-то странный способ собственного изобретения, но не мой способ. Мой способ указан в моем ответе. И это будет работать. Если вы попробуете это.

3. Мне показалось то же самое. Я ищу 10 минут, чтобы понять, как писать по-своему, но я не могу этого сделать. Как получить каждый пиксель изображения и как установить для каждого пикселя 2-кратное увеличение изображения? Не могли бы вы написать код, пожалуйста? 🙁

4. Посмотрите на код, который я опубликовал. Посмотрите на свой код. Найдите различия. Сделайте свой код похожим на мой код. Конкурсы.

5. Я, наконец, понял. Итак, я выиграл 🙂 Спасибо за вашу поддержку. Теперь я могу продолжить свой проект. Следующим шагом увеличьте масштаб в 4 раза, 8 раз и уменьшите в 2 раза, 4 раза, 8 раз. Я понимаю логику. Теперь легче продолжить 🙂 Еще раз спасибо.

Ответ №2:

Вы должны использовать DrawImage метод Graphics класса.

 Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();

Graphics g = Graphics.FromImage(bmpFirst);

// Draw image to screen.
g.DrawImage(newImage, destRect, x, y, width, height, units);
  

Посмотрите здесь: https://msdn.microsoft.com/en-us/library/ms142045 (v = против 110).aspx

Посмотрите также здесь: https://msdn.microsoft.com/en-us/library/k0fsyd4e (v = против 110).aspx

Вы даже можете установить режим интерполяции: https://msdn.microsoft.com/en-us/library/system.drawing .drawing2d.interpolationmode(v = vs.110).aspx

Вы ищете режим интерполяции NearestNeighbor.

Комментарии:

1. Спасибо за ссылки. Но я не знаю, почему я не могу написать e.Graphics. Часть drawImage (бла, бла, бла). Я не могу написать e и поставить точку, но показывает только эти команды: «Equals, GetHashCode, GetType, toString» Вы знаете, почему команда «Графика» не всплывала?

2. Моя вина. Это должно быть g.DrawImage ()

Ответ №3:

Он и есть решение.

 private void button4_Click(object sender, EventArgs e       )
    {
        listBox1.Items.Clear();
        listBox2.Items.Clear();
        listBox3.Items.Clear();

        using (OpenFileDialog dlg = new OpenFileDialog())
        {
            dlg.Title = "Open Image";
            dlg.Filter = "*.bmp|*.bmp|*.*|*.*";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(dlg.FileName);
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {


        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;
        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel1.CreateGraphics();




        int[,] colorR = new int[bmpHeight*2 , bmpWidth*2];
        int[,] colorG = new int[bmpHeight*2 , bmpWidth*2];
        int[,] colorB = new int[bmpHeight*2 , bmpWidth*2];



        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                int dx = x * 2;
                int dy = y * 2;

                colorR[dx, dy] = pixelColor.R;
                colorR[dx   1, dy] = pixelColor.R;
                colorR[dx, dy   1] = pixelColor.R;
                colorR[dx   1, dy   1] = pixelColor.R;

                colorG[dx, dy] = pixelColor.G;
                colorG[dx   1, dy] = pixelColor.G;
                colorG[dx, dy   1] = pixelColor.G;
                colorG[dx   1, dy   1] = pixelColor.G;

                colorB[dx, dy] = pixelColor.B;
                colorB[dx   1, dy] = pixelColor.B;
                colorB[dx, dy   1] = pixelColor.B;
                colorB[dx   1, dy   1] = pixelColor.B;




            }

        }



        for (int y = 0; y < (bmpHeight*2); y  )
        {
            for (int x = 0; x < (bmpWidth*2); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorR[x, y], colorG[x, y], colorB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
  

Комментарии:

1. Gerax, в StackOverflow копирование ответов других людей обычно не одобряется.

2. Почему ? Я не сделал ничего плохого. Я пишу окончательный код, чтобы кто-то мог получить помощь через Google. И я могу написать этот код благодаря @Mike Nakis . Вы можете прочитать наши обсуждения. Кроме того, это код решения, верно? Как это возможно написать по-другому? Я писал с использованием циклов for, но с той же логикой. Даже я напишу пересмотренное решение здесь, чтобы все могли видеть. Но в одном вы правы, я должен написать «Майк Накис» в своем ответе, но в любом случае я слишком много говорил. Хорошего дня 🙂

Ответ №4:

Вы можете использовать циклы for для цветных [dx, dy] частей.Здесь это для 8-кратного увеличения.

         int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel3.CreateGraphics();

        int[,] colorR = new int[bmpHeight * 8, bmpWidth * 8];
        int[,] colorG = new int[bmpHeight * 8, bmpWidth * 8];
        int[,] colorB = new int[bmpHeight * 8, bmpWidth * 8];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                int dx = x * 8;
                int dy = y * 8;

                for (int i = 0; i < 8; i  )
                {
                    for (int j = 0; j < 8; j  )
                    {
                        colorR[dx   j, dy   i] = pixelColor.R;
                        colorG[dx   j, dy   i] = pixelColor.G;
                        colorB[dx   j, dy   i] = pixelColor.B;
                    }
                }

            }
  

Ответ №5:

Полный код (также вы можете скачать project: Link

     private void button4_Click(object sender, EventArgs e       )
    {
        tabControl1.SelectedTab = tabPage1;

        using (OpenFileDialog dlg = new OpenFileDialog())
        {
            dlg.Title = "Open Image";
            dlg.Filter = "*.bmp|*.bmp|*.jpg|*.jpg|*.*|*.*";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(dlg.FileName);
            }
        }

        if (pictureBox1.Image == null)
        {
            MessageBox.Show("Please choose a image file.");
        }
        else
        {
            int bmpHeight = pictureBox1.Image.Height;
            int bmpWidth = pictureBox1.Image.Width;

            if (bmpHeight > 100 || bmpWidth > 100)
            {
                MessageBox.Show("Image size can't be bigger than 100x100 pixels");
                button1.Enabled = false;
                button2.Enabled = false;
                button3.Enabled = false;
                button5.Enabled = false;
                button6.Enabled = false;
                button7.Enabled = false;
                button10.Enabled = false;
            }
            else
            {
                button1.Enabled = true;
                button2.Enabled = true;
                button3.Enabled = true;
                button5.Enabled = false;
                button6.Enabled = false;
                button7.Enabled = false;
                button10.Enabled = false;
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage2;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel1.CreateGraphics();

        int[,] colorR = new int[bmpWidth * 2 , bmpHeight *2];
        int[,] colorG = new int[bmpWidth * 2 , bmpHeight *2];
        int[,] colorB = new int[bmpWidth * 2 , bmpHeight *2];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                int dx = x * 2;
                int dy = y * 2;

                for (int i = 0; i < 2; i  )
                {
                    for (int j = 0; j < 2; j  )
                    {
                        colorR[dx   i, dy   j] = pixelColor.R;
                        colorG[dx   i, dy   j] = pixelColor.G;
                        colorB[dx   i, dy   j] = pixelColor.B;
                    }
                }
            }

        }

        for (int y = 0; y < (bmpHeight*2); y  )
        {
            for (int x = 0; x < (bmpWidth*2); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorR[x, y], colorG[x, y], colorB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
    }

    private void button5_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage3;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel2.CreateGraphics();

        int[,] colorR = new int[bmpWidth * 4, bmpHeight * 4];
        int[,] colorG = new int[bmpWidth * 4, bmpHeight * 4];
        int[,] colorB = new int[bmpWidth * 4, bmpHeight * 4];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                int dx = x * 4;
                int dy = y * 4;

                for (int i = 0; i < 4; i  )
                {
                    for (int j = 0; j < 4; j  )
                    {
                        colorR[dx   i, dy   j] = pixelColor.R;
                        colorG[dx   i, dy   j] = pixelColor.G;
                        colorB[dx   i, dy   j] = pixelColor.B;
                    }
                }
            }

        }

        for (int y = 0; y < (bmpHeight * 4); y  )
        {
            for (int x = 0; x < (bmpWidth * 4); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorR[x, y], colorG[x, y], colorB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }

    }


    private void panel1_Paint(object sender, PaintEventArgs e)
    {


    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {

    }

    private void button5_Click_1(object sender, EventArgs e)
    {


    }

    private void tabPage2_Click(object sender, EventArgs e)
    {

    }

    private void button3_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage4;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel3.CreateGraphics();

        int[,] colorR = new int[bmpWidth * 8, bmpHeight * 8];
        int[,] colorG = new int[bmpWidth * 8, bmpHeight * 8];
        int[,] colorB = new int[bmpWidth * 8, bmpHeight * 8];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                int dx = x * 8;
                int dy = y * 8;

                for (int i = 0; i < 8; i  )
                {
                    for (int j = 0; j < 8; j  )
                    {
                        colorR[dx   i, dy   j] = pixelColor.R;
                        colorG[dx   i, dy   j] = pixelColor.G;
                        colorB[dx   i, dy   j] = pixelColor.B;
                    }
                }

            }

        }

        for (int y = 0; y < (bmpHeight * 8); y  )
        {
            for (int x = 0; x < (bmpWidth * 8); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorR[x, y], colorG[x, y], colorB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
    }

    private void button5_Click_2(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage5;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel4.CreateGraphics();

        int[,] colorR = new int[bmpWidth, bmpHeight];
        int[,] colorG = new int[bmpWidth, bmpHeight];
        int[,] colorB = new int[bmpWidth, bmpHeight];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                colorR[x, y] = pixelColor.R;

                colorG[x, y] = pixelColor.G;

                colorB[x, y] = pixelColor.B;

            }
        }

        int[,] colorSR = new int[bmpWidth /2, bmpHeight /2];
        int[,] colorSG = new int[bmpWidth /2, bmpHeight /2];
        int[,] colorSB = new int[bmpWidth /2, bmpHeight /2];

        for (int i = 0; i < bmpWidth / 2; i  )
        {
            for (int j = 0; j < bmpHeight /2; j  )
            {
                colorSR[i, j] = (colorR[2 * i, 2 * j]   colorR[2 * i, 2 * j   1]   colorR[2 * i   1, 2 * j]   colorR[2 * i   1, 2 * j   1]) / 4;
                colorSG[i, j] = (colorG[2 * i, 2 * j]   colorG[2 * i, 2 * j   1]   colorG[2 * i   1, 2 * j]   colorG[2 * i   1, 2 * j   1]) / 4;
                colorSB[i, j] = (colorB[2 * i, 2 * j]   colorB[2 * i, 2 * j   1]   colorB[2 * i   1, 2 * j]   colorB[2 * i   1, 2 * j   1]) / 4;
            }
        }

        for (int y = 0; y < (bmpHeight / 2); y  )
        {
            for (int x = 0; x < (bmpWidth / 2); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorSR[x, y], colorSG[x, y], colorSB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
    }

    private void groupBox1_Enter(object sender, EventArgs e)
    {

    }

    private void button6_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage6;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel5.CreateGraphics();

        int[,] colorR = new int[bmpWidth, bmpHeight];
        int[,] colorG = new int[bmpWidth, bmpHeight];
        int[,] colorB = new int[bmpWidth, bmpHeight];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                colorR[x, y] = pixelColor.R;
                colorG[x, y] = pixelColor.G;
                colorB[x, y] = pixelColor.B;

            }
        }

        int[,] colorSR = new int[bmpWidth / 4, bmpHeight / 4];
        int[,] colorSG = new int[bmpWidth / 4, bmpHeight / 4];
        int[,] colorSB = new int[bmpWidth / 4, bmpHeight / 4];

        for (int i = 0; i < bmpWidth / 4; i  )
        {
            for (int j = 0; j < bmpHeight / 4; j  )
            {
                colorSR[i, j] = (colorR[4 * i, 4 * j]   colorR[4 * i, 4 * j   1]   colorR[4 * i   1, 4 * j]   colorR[4 * i   1, 4 * j   1]) / 4;
                colorSG[i, j] = (colorG[4 * i, 4 * j]   colorG[4 * i, 4 * j   1]   colorG[4 * i   1, 4 * j]   colorG[4 * i   1, 4 * j   1]) / 4;
                colorSB[i, j] = (colorB[4 * i, 4 * j]   colorB[4 * i, 4 * j   1]   colorB[4 * i   1, 4 * j]   colorB[4 * i   1, 4 * j   1]) / 4;
            }
        }

        for (int y = 0; y < (bmpHeight / 4); y  )
        {
            for (int x = 0; x < (bmpWidth / 4); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorSR[x, y], colorSG[x, y], colorSB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
    }

    private void button7_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage7;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel6.CreateGraphics();

        int[,] colorR = new int[bmpWidth, bmpHeight];
        int[,] colorG = new int[bmpWidth, bmpHeight];
        int[,] colorB = new int[bmpWidth, bmpHeight];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                colorR[x, y] = pixelColor.R;
                colorG[x, y] = pixelColor.G;
                colorB[x, y] = pixelColor.B;

            }
        }

        int[,] colorSR = new int[bmpWidth / 8, bmpHeight / 8];
        int[,] colorSG = new int[bmpWidth / 8, bmpHeight / 8];
        int[,] colorSB = new int[bmpWidth / 8, bmpHeight / 8];

        for (int i = 0; i < bmpWidth / 8; i  )
        {
            for (int j = 0; j < bmpHeight / 8; j  )
            {
                colorSR[i, j] = (colorR[8 * i, 8 * j]   colorR[8 * i, 8 * j   1]   colorR[8 * i   1, 8 * j]   colorR[8 * i   1, 8 * j   1]) / 4;
                colorSG[i, j] = (colorG[8 * i, 8 * j]   colorG[8 * i, 8 * j   1]   colorG[8 * i   1, 8 * j]   colorG[8 * i   1, 8 * j   1]) / 4;
                colorSB[i, j] = (colorB[8 * i, 8 * j]   colorB[8 * i, 8 * j   1]   colorB[8 * i   1, 8 * j]   colorB[8 * i   1, 8 * j   1]) / 4;
            }
        }

        for (int y = 0; y < (bmpHeight / 8); y  )
        {
            for (int x = 0; x < (bmpWidth / 8); x  )
            {
                Color mySpecialColor = Color.FromArgb(colorSR[x, y], colorSG[x, y], colorSB[x, y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
    }

    private void button8_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;

        using (OpenFileDialog dlg = new OpenFileDialog())
        {
            dlg.Title = "Open Image";
            dlg.Filter = "*.bmp|*.bmp|*.jpg|*.jpg|*.*|*.*";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(dlg.FileName);
            }
        }

        if (pictureBox1.Image == null)
        {
            MessageBox.Show("Please choose a image file.");
        }
        else
        {

            int bmpHeight = pictureBox1.Image.Height;
            int bmpWidth = pictureBox1.Image.Width;

            if (bmpHeight > 800 || bmpWidth > 800)
            {
                MessageBox.Show("Image size can't be bigger than 800x800 pixels.");
                button1.Enabled = false;
                button2.Enabled = false;
                button3.Enabled = false;
                button5.Enabled = false;
                button6.Enabled = false;
                button7.Enabled = false;
                button10.Enabled = false;
            }
            else
            {
                button1.Enabled = false;
                button2.Enabled = false;
                button3.Enabled = false;
                button5.Enabled = true;
                button6.Enabled = true;
                button7.Enabled = true;
                button10.Enabled = false;
            }
        }
    }

    private void groupBox2_Enter(object sender, EventArgs e)
    {

    }

    private void button10_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;
        tabControl1.SelectedTab = tabPage8;

        int bmpHeight = pictureBox1.Image.Height;
        int bmpWidth = pictureBox1.Image.Width;

        Bitmap bmpFirst = (Bitmap)pictureBox1.Image.Clone();
        Graphics g = panel7.CreateGraphics();

        int[,] colorR = new int[bmpWidth, bmpHeight];
        int[,] colorG = new int[bmpWidth, bmpHeight];
        int[,] colorB = new int[bmpWidth, bmpHeight];

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                Color pixelColor = bmpFirst.GetPixel(x, y);

                colorR[x, y] = pixelColor.R;
                colorG[x, y] = pixelColor.G;
                colorB[x, y] = pixelColor.B;

            }
        }

        for (int y = 0; y < bmpHeight; y  )
        {
            for (int x = 0; x < bmpWidth; x  )
            {
                int dx = bmpWidth - 1;
                int dy = bmpHeight - 1;
                Color mySpecialColor = Color.FromArgb(colorR[dx - x, dy - y], colorG[dx - x, dy - y], colorB[dx - x, dy - y]);
                SolidBrush pixelBrush = new SolidBrush(mySpecialColor);
                g.FillRectangle(pixelBrush, x, y, 1, 1);
            }
        }
    }

    private void button9_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage1;

        using (OpenFileDialog dlg = new OpenFileDialog())
        {
            dlg.Title = "Open Image";
            dlg.Filter = "*.bmp|*.bmp|*.jpg|*.jpg|*.*|*.*";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(dlg.FileName);
            }
        }

        if (pictureBox1.Image == null)
        {
            MessageBox.Show("Please choose a image file.");
        }
        else
        {
            int bmpHeight = pictureBox1.Image.Height;
            int bmpWidth = pictureBox1.Image.Width;

            if (bmpHeight > 800 || bmpWidth > 800)
            {
                MessageBox.Show("Image size can't be bigger than 800x800 pixels");
                button1.Enabled = false;
                button2.Enabled = false;
                button3.Enabled = false;
                button5.Enabled = false;
                button6.Enabled = false;
                button7.Enabled = false;
                button10.Enabled = false;
            }
            else
            {
                button1.Enabled = false;
                button2.Enabled = false;
                button3.Enabled = false;
                button5.Enabled = false;
                button6.Enabled = false;
                button7.Enabled = false;
                button10.Enabled = true;
            }
        }
    }
}