Сканирование WIA через Фидер
WIA для сканирования через Фидер
вот мои свойства устройства:
Document Handling Select = 1 (2 is for flatbed, and 1 is for the feeder.)
вот мой элемент (страница) свойства:
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
у меня все работает гладко, если я установил "выбор обработки документов" на "2". Когда я установил его в " 1 " и запустил его, как раз перед тем, как я скажу пункт.Transfer () (или item.Transfer (bmp/jpeg/pngGuid)) я получаю исключение "значение не попадает в ожидаемый диапазон."
это так раздражает, какое значение? Я погуглил веб, и я смог найти только небольшую информацию, но это не очень помогает.
1 ответов
Я думаю, вам нужно установить свойство устройства "Pages" (ID 3096) от 0 до 1, чтобы предотвратить исключение. Мне потребовалось некоторое время, чтобы понять это. Наконец, я нашел это свойство, сравнив свойства устройства до и после вызова CommonDialogClass.ShowSelectItems.
вот код:
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);
}
}