Wstęp teoretyczny
Format Netpbm odnosi się tak na prawdę do zestawu formatów plikowych służących do przechowywania obrazów. W skład tego pakietu wchodzą trzy podstawowe formaty:- PBM - Portable Bit Map
- PGM - Portable Gray Map
- PPM - Portable Pixel Map
Jeśli kogoś interesuje więcej na temat tego formatu to zapraszam do czytania:
- http://netpbm.sourceforge.net/doc/
- http://en.wikipedia.org/wiki/Netpbm
- http://en.wikipedia.org/wiki/Netpbm_format
Jako, że potrzebowałem możliwości otwierania, edycji i prezentacji grafik zapisanych w formacie PGM, a nie napotkałem na żadną implementację obsługującą w pełni ten format - zarówno wersje zapisane w ASCII (P1-P3), jak i binarnie (P4-P6) - to postanowiłem stworzyć własną implementację tego formatu. A skoro już człowiek pisze obsługę PGM to wielkim trudem nie jest rozszerzenie biblioteki o PPM i PBM (choć z obrazem monochromatycznym było trochę zabawy z racji specyfiki zapisu danych w postaci binarnej - pakowanie 8 wartości w jeden bajt).
Zawartość bibliotek
Przechodząc jednak do sedna. Na moim chomiku (link) można zaopatrzyć się w archiwum z .dll zawierającym klasy obsługujące pliki PNM (wszystko pisane w C#), które to znajdują się w przestrzeni nazw: Runaurufu.Drawing.Netpbm. W tej samej dllce znajduje się również kilka użytecznych klas w przestrzeni Runaurufu.Drawing.Transform.W paczuszce znajduje się również .dll z Runaurufu.Extension, który to odpowiada za rozszerzanie różnych standardowych typów o użyteczne metody i generalnie na bieżąco jest rozwijana :)
Runaurufu.Drawing.Netpbm
public enum NetpbmFormat{...} public abstract class PnmImage : ICloneable {...} public class PbmImage : PnmImage {...} public class PgmImage : PnmImage {...} public class PpmImage : PnmImage {...} public class PamImage : PnmImage {...}
Runaurufu.Drawing.Transform
public class HistogramOperation { public static PnmImage Equalize(PnmImage img){...} public static PbmImage Equalize(PbmImage img){...} public static PgmImage Equalize(PgmImage img){...} public static PpmImage Equalize(PpmImage img){...} public static PamImage Equalize(PamImage img){...} public static Bitmap Equalize(Bitmap img){...} } public class Resize { public static Bitmap ResizeNoAspect(Bitmap img, Size size) {...} public static Bitmap ResizeKeepAspect(Bitmap img, Size size) {...} public static Bitmap ResizeKeepAspect(Bitmap img, Size size, Color filler, ContentAlignment align) {...} }
Przykładowe użycie
Interfejs przykładowej aplikacji :) |
Do tego w archiwum zawarty jest projekt (VS 2010) pokazujący przykład użycia biblioteki. W kilku słowach jest to program umożliwiający otwarcie plików PNM, ich podgląd i zapis do .bmp, jak również tworzenie plików PNM z otwartych plików bmp :)
Ogólna uwaga - aplikacja zapisuje dane w formatach P1-P3 i P7, czyli generalnie pliki PNM zapisywane są w ASCII, a jedynie PAM zapisywany (zgodnie ze specyfikacją formatu) jest w formie binarnej. Oczywiście z poziomu kodu można bez trudu "wszystko" zapisać binarnie (drugi argument metody Save() odpowiada za to czy zapis jest binarny, czy też nie).
Słowo na zakończenie
Na koniec kilka informacji dotyczących samych .dll - najnowsze wersje będą sukcesywnie wrzucane na mojego chomika do stosownych folderów:Tak więc jeśli ktoś chciałby skorzystać z moich wypocin to polecam ściągnąć najnowsze wersje prosto z chomika (paczka z przykładem nie będzie aktualizowana) :)
Brak komentarzy:
Prześlij komentarz