rysowanie siatki na bitmapie z podanymi parametrami od użytkownika

0

Dobry wieczór.

Nie mogłem nigdzie znaleźć takiego tematu, jeśli był to proszę o odnośnik do niego.

Mój problem to, narysowanie siatki x kratek na y kratek (np 10 kratek na 10 kratek), te kratki mają mieć swoją stałą wielkość. Jedynymi zmiennymi są ten x i y.
Nie bardzo wiem jak to zrobić.

Jedyne co znalazłem grzebiąc w googlach o tej porze to:

 for(int i=0; i< pictureBox1.Height; i++)
                for (int k = 0; k < pictureBox1.Width; k+=10)
                {
                    bit.SetPixel(k,i, Color.Red);
                    bit.SetPixel(i, k, Color.Red);
                }

Proszę o pomoc bo załamki dostaję już.

0

Nie mogłem nigdzie znaleźć takiego tematu, jeśli był to proszę o odnośnik do niego.

Proszę: dzielenie bitmapy według rozmiaru tablicy wielowymiarowej i rysowanie na tej bitmapie

ps. tak, wiem.

0

W moim poprzednim temacie nie ma odpowiedzi. Jest kod który ja sam napisałem i okazał się być totalną klapą. Już napisałem kod taki jak mi trzeba. Tylko nie rozumiem czemu nie dorysowuje ostatniej pionowej i poziomej linii.

 void przelicz_kratki_i_rysuj()
        {
            int wys_kr = 20, szer_kratki = 20; //kratka 20px x 20px

            int wys_pb = wys * 20, szer_pb = szer * 20; //skoro jedna kratka ma miec 20x20 to trzeba ilosc kratek pomnozyc * wys i szer zeby utworzyc wielkosc pictureboxa

            pictureBox1.Width = szer_pb; //szerokosc
            pictureBox1.Height = wys_pb; //wysokosc
            this.Width = pictureBox1.Width + 100;
            this.Height = pictureBox1.Height + 100;

            Bitmap mapa = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.Image = mapa;


            for (int i = 0; i < szer_pb; i++)
            {
                for (int j = 0; j < wys_pb; j+=20)
                {
                    mapa.SetPixel(i, j, Color.Red);
                    mapa.SetPixel(j, i, Color.Red);
                }
            }
            pictureBox1.Image = mapa;
            pictureBox1.Refresh();
        } 
0

Po co używasz SetPixel, jak jest DrawLine?

dodaj do FormLoad:

pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);

i robimy to tylko raz.

a potem:

void przelicz_kratki_i_rysuj()
{
    using (Graphics g = Graphics.FromImage(pictureBox1.Image))
    {
        g.Clear(Color.AliceBlue);
        g.DrawLine(Pens.Red, 0, 0, pictureBox1.Image.Width-1, pictureBox1.Image.Height-1);
    }
    // pictureBox1.Refresh(); // jeśli będzie trzeba
}

Nie sprawdzane.

0
Azarien napisał(a):

Po co używasz SetPixel, jak jest DrawLine?

dodaj do FormLoad:

pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);

i robimy to tylko raz.

a potem:

void przelicz_kratki_i_rysuj()
{
    using (Graphics g = Graphics.FromImage(pictureBox1.Image))
    {
        g.Clear(Color.AliceBlue);
        g.DrawLine(Pens.Red, 0, 0, pictureBox1.Image.Width-1, pictureBox1.Image.Height-1);
    }
    // pictureBox1.Refresh(); // jeśli będzie trzeba
}

Nie sprawdzane.

No jeśli Pan chce za pomocą

g.DrawLine(Pens.Red, 0, 0, pictureBox1.Image.Width-1, pictureBox1.Image.Height-1); 

narysować tylko jedna linie przekątną proszę bardzo. Ja w poprzednim temacie umieściłem taki sposób:

/*linie poziome*/
 
            int wart_poz_str = 0;
            int wart_poz_kon = tab.GetUpperBound(0) + 1;
            Pen nowy = new Pen(Color.Purple);
 
            for (int x = 0; x < wart_poz_kon; x++)
            {
                if (x % 10 == 0)
                    g.DrawLine(nowy, wart_poz_str, x, wart_poz_kon, x);
            }
            g.DrawLine(nowy, wart_poz_str, wart_poz_kon, wart_poz_kon, wart_poz_kon);
 
 
            /*linie pionowe*/
 
            int wart_pion_str = 0;
            int wart_pion_kon = tab.GetUpperBound(1) + 1;
            Pen nowy2 = new Pen(Color.Plum);
 
 
            for (int x = 0; x < wart_pion_kon; x++)
            {
                if (x % 10 == 0)
                    g.DrawLine(nowy2, x, wart_pion_str, x, wart_pion_kon);
            }
            g.DrawLine(nowy2, wart_pion_kon, wart_pion_str, wart_pion_kon, wart_pion_kon); 

Ale on mi nie pozwalał na rysowanie ilości komórek które użytkownik podaje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1