2012-10-31 32 views
5

Tworzę edytor map dla gry w C# Windows Forms. Potrzebuję siatki, która będzie musiała przechowywać nawet kilka tysięcy obrazów.Rysowanie dużej liczby obrazów w C# Windows Forms

Moje pierwsze podejście polegało na utworzeniu kontrolki Panel, a następnie dodaniu do niej wielu PictureBoxes. Niestety, 2000 zdjęć zajęło około 3 sekundy.

Wtedy postanowiłem spróbować tworzenia Rectangles i rysunek Images na nich w OnPaint() metody Panel jest w nadziei, aby uzyskać lepsze wyniki, ale nadal jest bardzo powolny.

Czy istnieje lepszy i skuteczniejszy sposób renderowania tylu obrazów w Windows Forms?

Z góry dziękuję za wszelkie porady.

+0

Czy wszystkie te 2000 zdjęć widocznych na ekranie w tym samym czasie? –

+0

Tak, są. Muszą być bardzo szybko renderowane, aby przejście z jednego miejsca na drugie nie wymagało 3 sekund. –

+0

@Mosquito - To, czego chcesz, nie jest realistyczne. Dlaczego nie możesz wygenerować obrazów, a następnie określić, które obrazy musisz wyświetlić? Twierdzę, że "3 sekundy" są tak szybkie jak twoje. –

Odpowiedz

3

Użyj zdarzenie malowania jak masz zrobić, ale ...

W ramach ładowanie obrazów, buforować pomniejszony wersję, gdzie scalenie 16 zdjęć w jednym, który jest tylko 125 zdjęć, kiedy pomniejszyć w określonej skali, przełącz na użycie renderowanej pomniejszonej wersji.

Możesz to zrobić tak często, jak chcesz, dla wielu poziomów powiększenia z pomysłem, aby w dowolnym momencie zachować jak najwięcej zdjęć na ekranie. Możesz podzielić go ponownie przez 4.

Robię to dla projektu, który ma mapę zawierającą 65536 zdjęć (256 x 256). Pamięć podręczna jest również zapisywana na dysku, więc za każdym razem, gdy ją pomniejszasz, widzisz taką samą liczbę obrazów. W moim edytorze mogę wyświetlić tylko 16 obrazów naraz, nawet jeśli patrzę na całą mapę.

Można to ulepszyć, znając dostępne opcje dla użytkownika (na przykład Pan i Zoom), co daje ograniczony podzbiór zdjęć, które użytkownik może wyświetlić jako następny, dzięki czemu można je wstępnie załadować, aby poprawić wydajność.

Będziesz zwiększono czas ładowania początkowo, ale założę się, że już mają znaczący czas ładowania uciągu 2000 obrazów wyłączyć dysk

+0

Dziękuję bardzo za odpowiedź. :-) –

+0

@Mosquito, cieszę się, że było pomocne! –