- 1,460
- 406
- CPU
- Intel i7 2600K @ 4.7ghz -> 5.66Ghz bench
- Dissipatore
- EK Supreme HF FullNickel
- Scheda Madre
- Gigabyte P67A-UD5-B3
- HDD
- Samsung EVO 256 GB + 1TB HDD
- RAM
- G.Skill ECO 1600 CL7 + 16 GB Corsair 1600 @ 2260mhz 7-10-7-25-2T bench
- GPU
- ASUS ENGTX570 DirectCU II (mod bios) -> EK DCII FullNickel @ 1ghz bench
- Audio
- Integrato Realtek HD
- Monitor
- Samsung s22b150 1920x1080
- PSU
- Enermax Modu 82+ 625W
- Case
- DimasTech Easy 2.5 Black Graphite + Laing 500Plus + EK XtX 360 + Nanoxia Fx2000 + Rehobus
- OS
- Linux Mint
ciao a tutti.
sto cercando di fare un programmino simile a Paint di windows e sto cercando di scrivere la funzione "riempi" (il secchiello insomma:D)
e ho scritto questa funzione:
invocata così sull'evento click sulla PictureBox:
in cui b è l'oggetto Bitmap sul quale sto disegnando (assieme a Graphics)
il problema è che se cerco di riempire un'area più grande di circa 100pixel mi da l'eccezzione StackOverflowException ma il mio non è un ciclo infinito:cav: ha solo parecchie iterazioni:asd:
PS: so che la parte che crea la griglia di 9 pixel è incompleta perchè manca la parte che evita di andare fuori dai limiti della size di b, ma così funziona se in precedenza faccio a caso delle figure chiuse entro i limiti di b:ok:
idee??:help: magari trasformando la funzione ricorsiva in un qualche ciclo for o while:look:
sto cercando di fare un programmino simile a Paint di windows e sto cercando di scrivere la funzione "riempi" (il secchiello insomma:D)
e ho scritto questa funzione:
Codice:
void colora(Point p, Color c1, Color c2)
{
b.SetPixel(p.X, p.Y, c2);
//creo la griglia di 8 pixel attorno a quello cliccato
Point[] A = new Point[8];
A[0] = new Point(p.X, p.Y + 1);
A[1] = new Point(p.X, p.Y - 1);
A[2] = new Point(p.X + 1, p.Y - 1);
A[3] = new Point(p.X + 1, p.Y + 1);
A[4] = new Point(p.X + 1, p.Y);
A[5] = new Point(p.X - 1, p.Y + 1);
A[6] = new Point(p.X - 1, p.Y - 1);
A[7] = new Point(p.X - 1, p.Y);
int i;
for (i = 0; i < 8; i++)
{
if (b.GetPixel(A[i].X, A[i].Y) == c1)
{
colora(A[i], c1, c2);
}
}
}
invocata così sull'evento click sulla PictureBox:
Codice:
Point click = ((MouseEventArgs)e).Location;
colora(click, b.GetPixel(click.X, click.Y), Color.Red);
in cui b è l'oggetto Bitmap sul quale sto disegnando (assieme a Graphics)
il problema è che se cerco di riempire un'area più grande di circa 100pixel mi da l'eccezzione StackOverflowException ma il mio non è un ciclo infinito:cav: ha solo parecchie iterazioni:asd:
PS: so che la parte che crea la griglia di 9 pixel è incompleta perchè manca la parte che evita di andare fuori dai limiti della size di b, ma così funziona se in precedenza faccio a caso delle figure chiuse entro i limiti di b:ok:
idee??:help: magari trasformando la funzione ricorsiva in un qualche ciclo for o while:look: