2011-08-16 26 views
7

WIA za pośrednictwem podajnikaWIA Skanowanie za pomocą podajnika

Oto moje Właściwości urządzenia:

Document Handling Select = 1 (2 is for flatbed, and 1 is for the feeder.) 

Oto moja pozycja (strona) Właściwości:

Horizontal Resolution = 150 
Vertical Resolution = 150 
Horizontal Extent = 500 (I want to get it first to work, then I'll play with the extents.), 
Vertical Extent = 500 
Bits Per Pixel = 8 
Current Intent = 4 

mam wszystko działa płynnie, jeśli Ustawiam "Wybór obsługi dokumentów" na "2". Kiedy ustawiłem go na "1" i uruchomiłem, tuż przed powiedzeniem item.Transfer() (lub item.Transfer (bmp/​​jpeg/pngGuid)) Otrzymuję wyjątek "Wartość nie mieści się w oczekiwanym zakresie."

To takie irytujące, jaką wartość? Przeszukałem internet, a ja mogłem tylko znaleźć trochę informacji, ale nie jest to zbyt pomocne.

+0

Grałem więcej z nim, i okazało się, że tylko w ten sposób mogę korzystać z podajnika był otwierając wspólny dialog zwrócić się do „element”. Metoda w oknie dialogowym żąda urządzenia. Ustawia właściwości urządzenia i elementu. Miałem podgląd właściwości i wygląda tak samo jak w moich pytaniach. I działa. Musi być coś, czego nie widzę ... –

+0

Mam ten sam problem. :-(Zakładam, że musi istnieć inna właściwość urządzenia, która musi zostać zmodyfikowana. –

Odpowiedz

6

Myślę, że musisz ustawić właściwość urządzenia "Strony" (ID 3096) od 0 do 1, aby zapobiec wyjątkowi. Zajęło mi to trochę czasu, aby to zrozumieć. Na koniec znalazłem tę właściwość, porównując właściwości urządzenia przed i po wywołaniu funkcji CommonDialogClass.ShowSelectItems.

Oto kod:

public enum DeviceDocumentHandling : int 
    { 
     Feeder = 1, 
     FlatBed = 2 
    } 

    const int DEVICE_PROPERTY_DOCUMENT_HANDLING_CAPABILITIES_ID = 3086; 
    const int DEVICE_PROPERTY_DOCUMENT_HANDLING_STATUS_ID = 3087; 
    const int DEVICE_PROPERTY_DOCUMENT_HANDLING_SELECT_ID = 3088; 
    const int DEVICE_PROPERTY_PAGES_ID = 3096; 

    public static Property FindProperty(WIA.Properties properties, 
             int propertyId) 
    { 
     foreach (Property property in properties) 
      if (property.PropertyID == propertyId) 
       return property; 
     return null; 
    } 

    public static void SetDeviceProperty(Device device, int propertyId, 
             object value) 
    { 
     Property property = FindProperty(device.Properties, propertyId); 
     if (property != null) 
      property.set_Value(value); 
    } 

    public static object GetDeviceProperty(Device device, int propertyId) 
    { 
     Property property = FindProperty(device.Properties, propertyId); 
     return property != null ? property.get_Value() : null; 
    } 

    public static void SelectDeviceDocumentHandling(Device device, 
           DeviceDocumentHandling handling) 
    { 
     int requested = (int)handling; 
     int supported = (int)GetDeviceProperty(device, 
       DEVICE_PROPERTY_DOCUMENT_HANDLING_CAPABILITIES_ID); 
     if ((requested & supported) != 0) 
     { 
      if ((requested & (int)DeviceDocumentHandling.Feeder) != 0) 
       SetDeviceProperty(device, DEVICE_PROPERTY_PAGES_ID, 1); 
      SetDeviceProperty(device, 
        DEVICE_PROPERTY_DOCUMENT_HANDLING_SELECT_ID, requested); 
     } 
    }