Как я могу сгенерировать новое растровое изображение по щелчку мыши в C #? - PullRequest
0 голосов
/ 04 октября 2019

У меня есть следующий код, показанный ниже. Я хочу иметь возможность изменять нарисованное изображение (Мандельброта) на основе пользовательского ввода schaal (масштаб), когда я нажимаю кнопку в графическом интерфейсе. Программа может нарисовать только одно изображение при запуске программы со значениями по умолчанию.

private void Form1_Shown(object sender, EventArgs e)        
{     
    double max = 100;     
    Bitmap bitmap = new Bitmap(Figuur.Width, Figuur.Height);  
    for (int x = 0; x < Figuur.Width; x++)
    {     
        for (int y = 0; y < Figuur.Height; y++) 
        {     
            double a = (double)(x - (Figuur.Width * schaal)) / (double)(Figuur.Width * 0.05);    
            double b = (double)(y - (Figuur.Height * schaal)) / (double)(Figuur.Height * 0.05);      
            Mandelgetal getal = new Mandelgetal(a, b); 
            Mandelgetal waarde = new Mandelgetal(0, 0);
            int i = 0;
            while (i < max)
            {
                //i++; //v1
                waarde.Vermenigvuldig();
                waarde.Toevoegen(getal);
                if (waarde.Wortel() > 2.0)
                    break;
                else
                {
                    if (i % 2.0 == 0.0)
                    {
                        bitmap.SetPixel(x, y, Color.White);
                        i++; //v2
                    }
                    else
                    {
                        bitmap.SetPixel(x, y, Color.Black);
                        i++; //v2
                    }
                } 
            }
            if (a * a + b * b > 4)
                bitmap.SetPixel(x, y, Color.Black);
            Figuur.Image = bitmap;
        }
    }
}

1 Ответ

0 голосов
/ 04 октября 2019

Я думаю, вы должны сделать это так, если хотите рисовать изображение в начале и каждый раз, когда нажимаете кнопку.

private void Form1_Shown(object sender, EventArgs e)        
{
    Scale();
}

private void But_Click(object sender, EventArgs e)
{
    Scale();
}

private void Scale()        
{     
    double max = 100;     
    Bitmap bitmap = new Bitmap(Figuur.Width, Figuur.Height);  
    for (int x = 0; x < Figuur.Width; x++)
    {     
        for (int y = 0; y < Figuur.Height; y++) 
        {     
            double a = (double)(x - (Figuur.Width * schaal)) / (double)(Figuur.Width * 0.05);    
            double b = (double)(y - (Figuur.Height * schaal)) / (double)(Figuur.Height * 0.05);      
            Mandelgetal getal = new Mandelgetal(a, b); 
            Mandelgetal waarde = new Mandelgetal(0, 0);
            int i = 0;
            while (i < max)
            {
                //i++; //v1
                waarde.Vermenigvuldig();
                waarde.Toevoegen(getal);
                if (waarde.Wortel() > 2.0)
                    break;
                else
                {
                    if (i % 2.0 == 0.0)
                    {
                        bitmap.SetPixel(x, y, Color.White);
                        i++; //v2
                    }
                    else
                    {
                        bitmap.SetPixel(x, y, Color.Black);
                        i++; //v2
                    }
                } 
            }
            if (a * a + b * b > 4)
                bitmap.SetPixel(x, y, Color.Black);
            Figuur.Image = bitmap;
        }
    }
}
...