2009-08-11 18 views
8

Gram z kodem od http://www.codeproject.com/KB/dotnet/twaindotnet.aspxPytanie Twaina: czy możliwe jest przeskanowanie tylko jednego dokumentu z podajnika?

Mam problem, ponieważ twain zwraca kontrolę dopiero po zeskanowaniu wszystkich dokumentów w podajniku. Prowadzi to do dużego zużycia pamięci, gdy skanuję 20 lub więcej dokumentów.

Myślałem o skanowaniu tylko jednego dokumentu na raz z podajnika i zapisaniu obrazu i ponownym wywołaniu api w pętli.

ja ustawiania cap_xfercount do 1, ale to nie wydaje się, aby pomóc:

TwCapability cap = new TwCapability(TwCap.XferCount, 1); 
    rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap); 

Co muszę zrobić, aby skanować tylko jeden dokument z podajnika? Wszelkie sugestie doceniane.

+1

Powinieneś również sprawdzić http://code.google.com/p/twaindotnet/; jest oparty na kodzie codeproject. –

Odpowiedz

1

To jest problem z podajnikiem. Czy próbowałeś ustawić opcję włączania podsieci na false?

EDIT:

Wygląda WPR _ AutoFeed jest droga. Według TWAIN 2.0 specification:

CAP _ AutoFeed Opis Jeżeli tak, to źródło będzie automatycznie pobierać następną stronę z podajnika dokumentów po liczbie klatek wynegocjowanych do przechwytywania z każdej strony zostały nabyte. CAP _ FEEDERENABLED musi mieć wartość PRAWDA, aby użyć tej funkcji. Aplikacja Ustaw zdolność PRAWDA, aby włączyć proces automatycznego podawania źródła, lub FALSE, aby go wyłączyć. Po zakończeniu każdego transferu, sprawdź TW _ PENDINGXFERS. Policz, aby określić, czy źródło ma więcej zdjęć do przesłania. Wartość -1 oznacza więcej zdjęć do przesłania, ale dokładny numer nie jest znany. CAP _ FEEDERLOADED wskazuje, czy podajnik źródła jest załadowany. (Proces automatycznego podawania jest kontynuowany za każdym razem, gdy jest to PRAWDA.)

+0

Tak, zrobiłem i próbuje skanować z płaskiej płyty –

+0

Co z CAP_AUTOFEED? – Filmund

+0

Nie mogę wyłączyć wyłączenia autoprzegubu, może ta funkcja nie jest obsługiwana przez skaner? Próbowałem cap = new TwCapability (TwCap.CAP_AUTOFEED, 0); rc = DScap (appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap); rc zawiera "błąd" –

0

Kolejność kabin jest ważna, patrz ten dokument www.twain.org/docs/CapOrderForWeb.

EDIT:

Oto niektóre fragmenty kodu z roztworu

konfiguracji pasza auto

capFeederEnabled = _twEntities.GetCapability(TwCap.FeederEnabled, (short)1); 
TwRC rc = DScap(_applicationId, _sourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, capFeederEnabled); 

TwCapability cap = _twEntities.GetCapability(TwCap.XferCount, 1); 
rc = DScap(_applicationId, _sourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap); 

i wtedy, gdy gdy wiadomość Twain Okno zostanie wysłana

rc = DSixfer(_applicationId, _sourceId, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, ref hbitmap); 
rc = DSpxfer(_applicationId, _sourceId, TwDG.Control, TwDAT.PendingXfers, TwMSG.EndXfer, pxfr); 

w końcu zresetuj skaner następnego dokumentu

rc = DSpxfer(_applicationId, _sourceId, TwDG.Control, TwDAT.PendingXfers, TwMSG.Reset, pxfr); 
6

Przykro mi, że nie jestem zaznajomiony z projektem twaindotnet, ale mam duże doświadczenie w skanowaniu dokumentów za pośrednictwem TWAIN.

Pierwsza uwaga: nie wszystkie podajniki dokumentów można podawać w trybie jednej strony; niektóre ważne rodziny skanerów zawsze skanują wszystko w podajniku po uruchomieniu. I całkiem sporo sterowników TWAIN nie uzna XFERCOUNT = 1, bez względu na to, co standard mówi.

Jeśli spróbujesz rozwiązać problem, zmuszając skaner do skanowania "zadań jednej strony", będziesz ograniczony do (nieokreślonego) zestawu skanerów, które obsługują to. Standard TWAIN po prostu nie wymaga tej funkcji. (Ale tak - CAP_AUTOSCAN = FALSE i XFERCOUNT = 1 będzie kombinacją do wypróbowania.)

Istnieje lepsze rozwiązanie (czas & z cierpliwością) - Wygląda na to, że chcesz przetwarzać i usuwać każdy obraz gdy nadchodzi, zamiast zbierać je wszystkie w pamięci. Dowiedz się, jak sprawić, by biblioteka TWAIN przekazała Ci każdy obraz (lub zapisz go do pliku), zamiast dostarczać go do pamięci, a otrzymasz rozwiązanie, które będzie działać ze wszystkimi skanerami do podawania dokumentów. Skanowanie będzie również szybsze nawet w przypadku większości skanerów ...