Artykuły

A A A
Drukuj Ekportuj do PDF
Opublikowane: 2003.12.09 2:10 | User 131096 | Aktualizacja: 2010.01.21 2:04

Prosta przeglądarka plików graficznych

… czyli lekkie zastępstwo dla dużych przeglądarek

Naszym celem jest napisanie prostej przeglądarki do plików graficznych. Zakładamy, że ma wyświetlać wszystkie pliki automatycznie rozpoznawane przez .NET Framework jako obrazki (BMP, GIF, JPEG, PNG oraz TIFF). Obrazki będą jedynie identyfikowane przez ich rozszerzenie (*.bmp, *.gif, etc.). Polem działania naszego programu jest katalog, w którym program został uruchomiony, bądź katalog, w którym znajduje się plik podany jako argument dla programu.

Mając w ten sposób sformułowane zadanie można zacząć pracę. Tworzymy nowy projekt Visual Studio .NET, Windows Application. Nasza przeglądarka ma wyświetlać obrazki na pełnym ekranie, więc zmieniamy właściwości głównego formularza w designerze:

Appearance/BackColor = Black; - czarne tło dla aplikacji

Appearance/FormBorderStyle = None; - brak obramowania okna

Appearance/Text = “SimpleViewer”; - nazwa okna w Task Managerze

Design/(Name) = “SimpleViewerForm”; - nazwa instancji klasy w kodzie

Layout/WindowState = Maximized; - początkowy stan okna to zmaksymalizowany

Window Style/ControlBox = False; - bez kontrolek systemowych (min/max/zamknięcie)

Window Style/TopMost = True; - opcjonalnie, by okno zawsze było na wierzchu

Window Style/Icon = ...; - opcjonalnie, wskazuje ikonkę do użycia

Najwygodniejszym dla programisty sposobem przedstawienia obrazka jest podpięcie go pod odpowiednią kontrolkę. .NET Framework posiada klasę System.Windows.Forms.PictureBox, która nawet jak sama nazwa wskazuje, doskonale nada się do naszych celów.

Przeciągamy PictureBox na nasz formularz i ustawiamy właściwości:

Behavior/SizeMode = CenterImage; - sposób skalowania obrazka (wyśrodkowanie)

Design/(Name) = „pictureBox”; - nazwa instancji klasy w kodzie

Layout/Dock = Fill; - sposób „dokowania” kontrolki (wypełenienie)

Właściwości, nie wymienione powyżej, pozostawiamy z domyślnymi wartościami. Ponieważ program będzie pracował na systemie plików (odczyt obrazków), należy zadeklarowac użycie przestrzeni nazw System.IO:

using System.IO;

Aby program przyjmował jakieś parametry z linii poleceń, należy zmienić definicję punktu startowy programu oraz domyślnego konstruktora formularza, przekazując argumenty z linii poleceń:

public class SimpleViewerForm : System.Windows.Forms.Form
{
     ...
     private string[] args;
     ...
     public SimpleViewerForm(string[] args)
     {
          ...
     }
     ...
     static void Main(string[] args)
     {
          Application.Run(new SimpleViewerForm(args));
     }
     ...
}

Jeśli przy uruchomieniu aplikacji zostaną podane argumenty, pierwszy z nich traktowany jest jako nazwa pliku z obrazkiem, który chcemy wyświetlić. Jeśli nie zostaną podane żadne argumenty – przeglądarka będzie wyświetlać pliki z aktualnego katalogu, posortowane alfabetycznie. Lista takich plików jest tworzona przez metodę:

private System.Collections.ArrayList GetFilenames(string path, string[] patterns)
{
System.Collections.ArrayList filenameList = new System.Collections.ArrayList();
     foreach(string pattern in patterns)
          foreach(string filename in System.IO.Directory.GetFiles(path, pattern))
               filenameList.Add(filename);
     filenameList.Sort();
     return filenameList;
}

Kolejno dla ścieżki (path) sprawdzane są wzorce (patterns) i jeśli w katalogu roboczym znajdują się pliki, które spełniają podane kryteria – dodawane one są do kolekcji plików. Następnie kolekcja plików jest sortowana i zwracana.

Obrazek jest wyświetlany za pomocą metody:

private void DisplayImage(int index);

Metoda ta proporcjonalnie skaluje obrazek, jeśli jest większy niż dostępny rozmiar ekranu. Warto zwrócić uwagę na implementację, która uniezależnia aplikację od aktywnej rozdzielczości – okno wyświetlania jest maksymalizowane, więc jego rozmiary są równe aktualnej szerokości i wysokości ekranu w pikselach. Najpierw jest ładowany do pamięci obrazek, jeśli taka potrzeba istnieje - wykonywane jest skalowanie – następnie obrazek jest wyświetlany (patrz: załączony kod źródłowy).

Aplikacja reaguje na trzy klawisze: Page Up – zmiana obrazka o jeden „w górę”, Page Down – zmiana obrazka o jeden „w dół” oraz Escape – zakończenie programu. Obsługą klawiszy zajmuje się:

private void SimpleViewerForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
     switch(e.KeyCode)
     {
          case System.Windows.Forms.Keys.PageDown:
          ...
          return;
          case System.Windows.Forms.Keys.PageUp:
          ...
          return;
          case System.Windows.Forms.Keys.Escape:
               this.Close();
               return;
          }
     }
}

Stworzoną w ten sposób aplikację można skojarzyć z odpowiednimi rozszerzeniami (*.bmp, *.gif, *.jpg, *.jpeg, *.jpeg, *.tif) w Explorerze i używać jako prostej domyślnej przeglądarki obrazków. Niewątpliwą zaletą tej aplikacji jest jej duża przenośność, ze względu na jej „ciężar” – 24.5kb i możliwość szybkiego przełączenia podglądu na inne obrazki w tym samym katalogu.

W całym załączonym kodzie źródłowym zamieszczone są szczegółowe komentarze. Zdecydowałem się pisać je po angielsku dla większej jednolitości kodu. Zachęcam wszystkich do zapoznania się z kodem.

-Marcin ‘Vigrid’ Seredyński

 

Załączniki:


Podobne artykuły

Komentarze 5 Masz uwagi do tej strony? Napisz

kmccoy1329 2010.01.21 1:09
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
Kod nieczytelny - bez prawidłowego skomentowania. Ewentualne komentarze - w języku angielskim - nie wiadomo dlaczego i po co. Mieszkamy w Polsce!!!!!!!!!!!!!!!!!!!!!
uzytkownik usuniety 2010.01.21 1:09
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
ja też znam angielki(i to b.dobrze...), ale te kod zakomantowany po angielsku to żenada
grzesiekburak1587 2010.01.21 1:09
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
przychylam sie do oceny recenzentów
kurczycki1591 2010.01.21 1:09
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
bomba
katarzynabasiak1604 2010.01.21 1:09
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
jak moderator

Dodaj komentarz

avatar

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Autor User 131096
avatar
 

Załóż konto
CodeGuru to miejsce dla każdego programisty. Przez lata portal rozwijany był siłami społeczności i to właśnie społeczność programistów jest tutaj najważniejsza. CG od wielu lat gromadzi wokół siebie coraz większą grupę pasjonatów. Warto być jej częścią!

Dowiedz się więcej o CodeGuru

Geek Club - Windows Phone

 

MetroOne

Idź na górę strony