Podglądanie obrazków z plików RAW

29 września 2006, 20:46

KomentarzeKomentarze: 0 KategorieKategorie: .netimage

Jakiś czas temu pojawił się u mnie malutki pomysł na prostą aplikacyjkę porządkującą pliki z obrazkami w postaci RAW na moim dysku. Dokładnie chodzi o pliki CR2 powstałe z Canona. Chciałem mieć także możliwość podglądu w tymże programiku. Pomyślałem, że może udostępnione ostatnio narządko Microsoft RAW Image Thumbnailer and Viewer for Windows XP ułatwi mi sprawę i w sumie tak się stało. :)

Stworzyłem małą biblioteczkę do której dodałem referencję do biblioteczki COM RawViewer. W ten sposób powstał Interop pozwalający już na bezbolesne korzystanie z jej dobrodziejstw.

Podstawową i jedyną klasą jest klasa RawManager.CRawViewerClass.Udostępnia ona kilka metod, ale mi była potrzebna tylko jedna:

public virtual System.Array GetThumbnailBitmap( lDesiredWidth, int lDesiredHeight, out int pRotationAngleAsShot, out int pActualWidth, out int pActualHeight)

W ten sposób stworzyłem prostą biblioteczkę, dzięki której możemy posługiwać się już obiektem typu Bitmap. Kod klasy zamieszczam poniżej.

Dodatkowo ładuje dane Exif do klasy DRawExif  i zwraca za pomocą property LastRAWExif.

Skompilowana biblioteka (Framework 2.0, wymagany Microsoft RAW Image Thumbnailer and Viewer for Windows XP) do ściągnięcia i użycia tutaj: http://www.dario-g.com/download.aspx?file=DRaw/DRaw.zip

 

 

 

 

 

 

												1
			2
			3
			4
			5
			6
			7
			8
			9
			10
			11
			12
			13
			14
			15
			16
			17
			18
			19
			20
			21
			22
			23
			24
			25
			26
			27
			28
			29
			30
			31
			32
			33
			34
			35
			36
			37
			38
			39
			40
			41
			42
			43
			44
			45
			46
			47
			48
			49
			50
			51
			52
			53
			54
			55
			56
			57
			58
			59
			60
			61
			62
			63
			64
			65
			66
			67
			
												    public class DRawThumbnailer
			{
			RawManager.CRawViewerClass _raw = null;
			DRawExif _dRawExif = null;
			public DRawThumbnailer()
			{
			_raw = new RawManager.CRawViewerClass();
			}
			public DRawExif LastRAWExif
			{
			get { return this._dRawExif; }
			}
			/// <summary>
			/// Tworzy miniaturkę z zadanego pliku RAW o zadanej wielkości i zwraca w postaci array'a bajtów.
			/// </summary>
			/// <param name="maxWidth">Maksymalna szerokość miniaturki</param>
			/// <param name="maxHeight">Maksymalna wysokość miniaturki</param>
			/// <param name="fileName">Plik typu RAW</param>
			/// <returns>Miniaturka w postaci array'a bajtów</returns>
			public byte[] GetThumbnailBytes(int maxWidth, int maxHeight, string fileName)
			{
			byte[] ar = new byte[0];
			try
			{
			_raw.Load(fileName);
			int pRotationAngleAsShot, pActualWidth, pActualHeight;
			ar = (byte[])_raw.GetThumbnailBitmap(maxWidth, maxHeight, out pRotationAngleAsShot, out pActualWidth, out pActualHeight);
			LoadRAWExif(_raw);
			}
			finally
			{
			_raw.Unload();
			}
			return ar;
			}
			private void LoadRAWExif(RawManager.CRawViewerClass _raw)
			{
			_dRawExif = new DRawExif(_raw);
			}
			/// <summary>
			/// Tworzy miniaturkę z zadanego pliku RAW o zadanej wielkości i zwraca w postaci obiektu Bitmap.
			/// </summary>
			/// <param name="maxWidth">Maksymalna szerokość miniaturki</param>
			/// <param name="maxHeight">Maksymalna wysokość miniaturki</param>
			/// <param name="fileName">Plik typu RAW</param>
			/// <returns>Miniaturka w postaci obiektu Bitmap</returns>
			public Bitmap GetThumbnailBitmap(int maxWidth, int maxHeight, string fileName)
			{
			MemoryStream ms = new MemoryStream(GetThumbnailBytes(maxWidth, maxHeight, fileName));
			return new Bitmap(ms);
			}
			/// <summary>
			/// Tworzy miniaturkę z zadanego array'a bajtów i zwraca w postaci obiektu Bitmap.
			/// </summary>
			/// <param name="imageData">Miniaturka w postaci array'a bajtów</param>
			/// <returns>Miniaturka w postaci obiektu Bitmap</returns>
			public Bitmap GetThumbnailFromBytes(byte[] imageData)
			{
			return new Bitmap(new MemoryStream(imageData));
			}
			}
			

 

 

Jeśli spodobał Ci się ten artykuł, to podziel się tą informacją z innymi.

Nikt jeszcze nie skomentował tego artykułu. Bądź pierwszy.

Dodaj komentarz Dodaj komentarz

Twój email (niepublikowany/opcjonalnie):

Twoja strona (opcjonalnie):

Imię i nazwisko/nick (wymagane):

Treść (wymagane):

Chcę być poinformowany o kolejnych komentarzach:

Te pola zostaw puste

Uwaga! Zastrzegam sobie prawo do usuwania obraźliwych i wulgarnych komentarzy.