2008-08-12 12 views
21

Chcę zaimplementować system archiwizacji bez dokumentów papierowych i chciałem użyć WIA z C# do akwizycji obrazu. Istnieje sporo przykładowych projektów na CodeProject, itp. Jednak po pobraniu każdego z nich, które mogę znaleźć, natknąłem się na problem.Używanie C#/WIA w wersji 2.0 w Vista do skanowania

W każdym z nich odniesienie do WIALib jest zepsute. Kiedy dodam "Microsoft Windows Image Acquisition" jako odniesienie, jedyną wersją dostępną na mojej stacji roboczej programistycznej (również na komputerze, który to uruchomi) jest 2.0.

Niestety, każdy z tych przykładowych projektów wydaje się być kodowany przeciwko 1.x. Odniesienie występuje jako "WIA" zamiast "WIALib". Zrobiłem zdjęcie, po prostu zmieniając import przestrzeni nazw, ale wyraźnie API jest drastycznie inne.

Czy są jakieś informacje na temat implementacji wersji 2.0 lub aktualizacji jednego z istniejących projektów próbek?

+0

szybkie pytanie. Czy absolutnie potrzebujesz WIA? Czy możesz poradzić sobie z Twainem? Jeśli Twain jest w porządku, mogę podać kod do przekazania. –

Odpowiedz

21

Aby uzyskać dostęp do WIA, należy dodać odwołanie do biblioteki COM "Microsoft Windows Image Acquisition Library v2.0" (wiaaut.dll). dodaj "używając WIA;"

const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; 
CommonDialogClass wiaDiag = new CommonDialogClass(); 
WIA.ImageFile wiaImage = null; 

wiaImage = wiaDiag.ShowAcquireImage(
     WiaDeviceType.UnspecifiedDeviceType, 
     WiaImageIntent.GrayscaleIntent, 
     WiaImageBias.MaximizeQuality, 
     wiaFormatJPEG, true, true, false); 

WIA.Vector vector = wiaImage.FileData; 

(System.Drawing)

Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData())); 
i.Save(filename) 

Ów podstawowy sposób, współpracuje z mojego podajnika Platforma/doc. Jeśli potrzebujesz więcej niż jednego dokumentu/strony na raz, prawdopodobnie istnieje lepszy sposób na zrobienie tego (z tego co widziałem, to obsługuje tylko jeden obraz na raz, chociaż nie jestem do końca pewien). Chociaż jest to dokument WIA v1 doc, to Scott Hanselman Coding4Fun article on WIA zawiera więcej informacji o tym, jak to zrobić dla wielu stron, myślę (mam jeszcze pójść dalej niż to sam)

Jeśli dla elektronicznego systemu biurowego , możesz również wypróbować MODI (Office Document Imaging), aby wykonać dla ciebie wszystkie OCR.

+0

Dam ci ten strzał. Nie mam problemu z OCR, ponieważ nie widziałem żadnego z systemów, który byłby wystarczająco blisko moich rzeczy, aby był bardziej przydatny niż po prostu przyzwoite metadane i tagowanie. To powinno dać mi większość tego, czego potrzebuję, jak kiedyś to jest odniesienie, mogę przekopać się przez interfejs API –

+5

Zamiast tego magicznego GUID można użyć System.Drawing.Imaging.ImageFormat.Jpeg.Guid.ToString ("B"). – Lars

+5

Lub możesz użyć przewodnika zdefiniowanego w Interop.WIA .dll FormatID.wiaFormatJPEG –

0

Nie trzeba trzeba być WIA. Głównie patrzyłem na konfigurację WIA, ponieważ oferuje ten sam podstawowy interfejs dla różnych skanerów. Mam 3 skanery na tym komputerze i sterowniki/oprogramowanie TWAIN dla wszystkich z nich ssanie (jak blokowanie ekranu podczas skanowania).

Do zarządzania dokumentami, naprawdę szukam prostych skanów 200dpi w skali szarości, więc większość rzeczy w sterownikach TWAIN to przesada.

To powiedziawszy, pytanie tutaj było częścią mojej ostatniej próby ustalenia, jak to zrobić w WIA przed przejściem do TWAIN.

0

Kolejna uwaga: Musisz pobrać bibliotekę DLL WIA 2.0 z witryny Microsoft.com, a następnie przejść do biblioteki dll i dodać ją do swojego projektu.

1

Aktualizacja: Dodaję to oddzielnie od jego inną odpowiedź (rok później). Nauczyłem się XP ma WIA 1.0 i Vista dalej ma WIA2.0. Możesz jednak zainstalować WIA 2.0 dla Windows XP Sp1 + z here.

Wtedy również małą bibliotekę z kodem znalazłem gdzieś na interweb tutaj, ma również możliwość skanowania wielu stron: http://adfwia.codeplex.com/

Powiązane problemy