Y
@zeropage Das waren alle Punkte, die hinzugefügt wurden. In dem Code sieht das in etwa so aus:
while(!stack.empty()) // solange stack nicht leer ist
{
// Koordinaten holen
// pop // letztes Element von stack runter, nun ist stack beim ersten start leer
DWORD currCol=raster.Get(x, y);
raster.Set(x, y, 0xFFFF00FF);
anim.Add(d, 50);
raster.Set(x, y, currCol);
// Überprüfung
Also alle Punkte, die irgendwann auf den Stack gepusht wurden, werden dargestellt.
Mit den angesprochenen transparenten Farben und einer Toleranz ist es deutlich:
Richtig (etwas umgestellt, damit es nicht so wild aussieht):
https://i.ibb.co/VL5WzgL/raster-alpha-richtig.webp
Falsch (Pixel werden mehrfach beschrieben):
https://i.ibb.co/NpTR4Rq/raster-alpha-falsch.webp
Ersteres kann man zum Beispiel mit einem 2D-Array erreichen:
// Arr2D-Spezialisierung, hat intern einen vector<bool>
Arr2D<bool> bits(width, height);
...
// Nur in Pseudo-Code
while(!stack.empty())
{
...
if(/*Farbe gleich bzw. innerhalb einer Toleranz*/)
{
// oben: nicht bereits in der oberen Zeile
// und die Koordinaten wurden noch nicht hinzugefügt?
if(y>0 && !bits.Get(x, y-1))
{
// den Punkt auf den Stack schieben
stack.push(x, y-1);
// Punkt im 2D-Array setzen
bits.Set(x, y-1, true);
}
// die anderen Punkte entsprechend
}
}