Seam Carving (3)
Zupdatowałem źródło projekciku Seam Carving.
Troszeczkę przesadziłem z designem aplikacji. No ale od czegoś trzeba zacząć. Już wiem z czym to się je.
Aplikacja Rozdzielona jest na trzy moduły.
-UI w Formsach -Silnik Algorytmu -Silnik Graficzny
Silnik Graficzny:
IEnergyCalculator: - interfejs klasy liczącej energię EnergyCalGradient - liczenie gradientu IImageProcessor - interfejs klasy przetwarzającej obraz GdiImageProcess - przetwarzanie przy pomocy GDI+ i LockBitów IPixelManipulator - interfejs klasy modyfikującej pixele PixelColor -kolorowanie pixeli PixelRemove - usuwanie pixeli
Silnik Algorytmu
ISeamManipulator : - interfejs klasy operującej na Seamach DynamicSeamManipulator - dynamiczne usuwanie seama DynamicSeamManipulatorWithMark - to samo ale z zaznaczaniem seama StaticSeamManipulator - statyczne seamy [nie obsługiwane] StaticSeamManipulatorWithMark
Psuedo kod aplikacji:
for 1 to n do {
- Wczytanie Obrazka
- Wybranie Parametrów przetwarzania bitmapy
- Wywołanie algorytmu SeamCarving
- Wywołanie metody ManipulateSeam ISeamManipulatora
- Wyliczenie Energi Obrazka wywołanie metody Energy silnika graficznego ktora jako jeden parametr przyjmuje interfejs IEnergyCalculator
- Wyznaczenie Seama
- Wywołanie silnika graficznego i metody przetwarzającej obrazek na podstawie seama. }
Zastosowanie interfejsów pozwoliło mi stworzyć mniej powiązane klasy. Teraz np jak chcę policzyć Energię inną funkcją wystarczy , że stworzę klasę i odpowiednio zaimplementuje interfejs.W paru miejscach oczywiście przesadziłem m.in łamiąc regułę YAGNI ( You Aren’t Gonna Need It)</div> Testy
Energia
Na razie projekcik jest na wstrzymaniu. Jak ktoś ma jakieś uwagi , pytania to proszę pisać. Projekt “SeamCarving”