Witam; właśnie jestem w końcowej fazie projektu prostego edytora grafiki wektorowej. Program tak w skrócie: ładuje pliki rastrowe do pictureBoxa, tam mogę obrysowywać interesujące mnie kształty krzywymi beziera lub innymi kształtami i kiedy już uznam, że robota skończona otrzymuję na wyjściu plik txt z zapisem wektorowym naniesionych kształtów.
Podczas rysowania bezierów, zwłaszcza jeśli załadowana bitmapa jest duża (np. 3000x3000) wysypuje mi OutOfMemoryException.
Wiąże się to pewnie z tym wycinkiem kodu:
public Image getRaster()
{
Image outputImage = new Bitmap(currentImage);
drawPoints(outputImage); //rysuje punkty z kolekcji punktów
drawBeziers(outputImage);//rysuje kształty na podstawie punktów
drawLastPointWithSattelites(outputImage);//rysuje "projektor" czyli tą "styczną" dla Bezierów
return outputImage;// zwraca obraz, po czym w klasie z interfejsem przypisywany jest on pictureBox.Image=vectorGenerator.getRaster();
}
ta metoda jest wywoływana przy zdarzeniu MouseMove jeśli wciśnięty jest lewy przycisk myszki, zatem przy każdorazowym przesunięciu kursora tworzy się nowa bitmapa - pewnie garbage collector nie nadąża :/.
projektowanie bezierów odbywa się podobnie jak np. w najnowszym photoshopie - pojawia się taka "linia" z punktami bezierów, coś tak tu:
Jak to rozwiązać?