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”



