Rysowanie linii po zmianie rozmiaru kontrolki pictureBox

0

Rysuje linie w pictureBox i wszystko jest dobrze póki nie zmieniam rozmiaru pictureBox, przy zmienionej wysokości i szerokości punkty dla linii wychodzą w innych miejscach niż klikam. Czym może być to spowodowane?


private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (StartLine)
                {
                    p = e.Location;
                    StartLine = false;
                }
                else
                {
                    g.DrawLine(pioro, p, e.Location);
                    pictureBox1.Refresh();
                    StartLine = true;
                }
            }
        } 

user image
czerwony - pozycja myszki
A - pozycja narysowanego punktu (ziel-nieb znacznik po narysowaniu)

0

jeżeli obiekt na którym rysujesz to picturebox, to może spróbuj p = picturebox.PoinToClient(e.Location). Prawdopodobnie pobierasz bezwzględny punkt myszki na ekranie a nie na samym pictureboxie

0

niestety ale rozjeżdża się jeszcze bardziej, również w oryginalnym rozmiarze

0

Jak powstaje twoje g?

0

private Graphics g;
private Bitmap ObrazOryg;

ObrazOryg = (Bitmap)Image.FromFile(openFileDialog1.FileName);
g = Graphics.FromImage(ObrazOryg);
pictureBox1.Image = ObrazOryg;
0

No czyli działa prawidłowo. Obrazek zwrócony przez Image.FromFile ma określoną rozdzielczość, która jest niezależna od rozmiaru kontrolki i nie zmienia się. Obrazek do wyświetlenia na kontrolce jest skalowany (sposób skalowania można wybierać, ale z głowy nie powiem jak się to property nazywa).

Rysujesz po obrazku, więc obowiązują współrzędne „obrazkowe”.
To co chcesz zrobić to rysowanie po kontrolce - ale trzeba to zrobić w zdarzeniu Paint, inaczej będzie się psuło.

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