Witam
Piszę sobie taki mały programik do generowania i wyświetlania labiryntów różnymi metodami. Natrafiłem na pewien problem. Mianowicie skalowanie i przemieszczanie wyrenderowanej grafiki (bitmapy) przy większych labiryntach jest czasochłonne i zawiesza program. Myślę, że problemem jest sposób w jaki ja staram się wyświetlać cały labirynt. Wygląda to następująco :

1.Generuję labirynt (bool[Width,Height] gdzie true=droga,false=ściana)
2.Po wygenerowaniu tworzę bitmapę
-w zależności od metody (w .exe w załączniku będzie z liniami) rysuję na bitmapie albo linie albo kwadraty
o danej wysokości(Bitmap[DługLabRozmiarŚciany,WysLabRozmiarŚciany])
3.Wyświetlam na panelu daną bitmapę.

*Kiedy użytkownik chce przesunąć wygenerowaną bitmapę rysuję ją po prostu od początku gdzię punkt początkowy jest różnicą pomiędzy długościami X i Y kursora na początku i na końcu przeciągnięcia.
*Kiedy użytkownik chce przeskalować (zwiększyć odległość/zmiejszyć) tworzę nową Bitmapę ze starej czyli
Bitmap b = new Bitmap(pierwotna,nowaDlugosc,nowaWysokosc)

Problem w tym, że przy większych obraza program zacina się na dłuższy czas. Jaki jest substytut mojego rozwiązania aby wszystko działało bez przycięć ?

W załączniku przesyłam .exe programu aby zobaczyć w praktyce o co mi chodzi.

od ok. 450x450 zaczyna się zacinanie skalowania (kółko myszy)

Fragment kodu za skalowanie i zmienianie położenia :

/* Skalowanie */

 {
            Bitmap newImage = new Bitmap(width, height);

            using (Graphics gr = Graphics.FromImage(newImage))
            {
                gr.InterpolationMode = InterpolationMode.NearestNeighbor;
                gr.DrawImage(img, new Rectangle(0, 0, width, height));
            }

            return newImage;
        } 

Pozdrawiam
Astrocyt