WykopGwardel.icio.us

Podglądanie obrazków z plików RAW

29 września 2006, 20:46

KomentarzeKomentarze: 0 KategorieKategorie: raw.net

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));
}
}

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:

To pole zostaw puste

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