Temat: Dynamiczny Graphics WinForms
Powiem tak, to po części rozwiązuje problem jeśli chodzi o samo wyświetlanie(czegoś podobnego próbowałem wcześniej).
Może podam przykład o co dokładniej mi chodzi:
Tworzę sobie przestrzeń roboczą:
InitializeComponent();
graphArea.Image = new Bitmap(graphArea.Width, graphArea.Height);
g = Graphics.FromImage(graphArea.Image);
rysuje sobie punkt
g.FillEllipse(new SolidBrush(Color.Red), x, y, 10, 10);
Przy czym x,y - użyte wyżej współrzędne punktu losuje sobie używając randoma na obszarze ograniczonym
graphArea.Width, graphArea.Height =>
x = r.Next(0, graphArea.Width);
y = r.Next(0, graphArea.Height);
g.FillEllipse(new SolidBrush(Color.Red), x, y, 10, 10);
PictureBox(mój graphArea) jest zadokowany => dock in Parent Container
Po uruchomieniu aplikacji okno nie jest zmaksymalizowane na fullScreen,
załóżmy że jest w rozmiarze 600x450.
GraphArea.Width , graphArea.Height pobierze aktualny stan okna , wylosuje punkty z tego obszaru od 0 - podanych wartości(Height,Width), narysuje je.
Robie resize na fullscreen. GraphArea.Width graphArea.Height się zmienia .
Poprzednie wartości pozostają w mniejszym obszarze w części 450x600 (tak jak to było przed maxymalizacją na fullscreen) patrząc od lewego górnego rogu(0,0) a reszta z obszaru 1024x768 po resize na fullScreen jest pusta.
Sam strechImage jest ok , tylko że on po maksymalizacji przybliża obrazek - powiększa/rozciąga .
Bardziej chodzi mi o efekt centerImage z możliwością zachowania proporcji obrazka.W tym momencie samo centerImage jest dobre, jednak dana przestrzeń dalej jest ograniczona do 600x450 leżąc w centralnej części okna w przy fullRezise .Chyba nie pozostaje mi nic innego jak podczas resize przerysowac obrazek z uwzględnieniem przesunięcia punktów dla pełnej rozdzielczości=> tak, żeby punkty były rozrzucone równomiernie w zmaksymalizowanym oknie przy zachowaniu proporcji.
Tak widocznie musi być skoro same współrzędne punktów zamykają się pierwotnie w mniejszym obszarze(charakterystycznym dla początkowego uruchomienia aplikacji).
Dziwne jednak jest to, że ten obszar po zmaksymalizowaniu i próbie losowania punktu nie rozszerza się, tylko zawsze wyjściowym ograniczeniem jest Width i Height z okna niezmaksymalizowanego (600x450) a nie z fullscreen np.(1024x768),to tak jakby graphArea.Width i graphArea.Height się nie zmieniały.
Możliwe, że odczytania wartości należy dokonać podczas wywołania metody resize na oknie.
Nie wiem czy podany przykład okaże się zrozumiały, mam nadzieję, że tym razem udało mi się naświetlić problem.
Pozdrawiam.
Ten post został edytowany przez Autora dnia 05.11.14 o godzinie 20:30