Как перечислить разрешения, поддерживаемые через TWAIN - PullRequest
2 голосов
/ 11 октября 2011

Я должен перечислить DPI, поддерживаемые сканером через интерфейс TWAIN.

// after Acquire is called... 
TW_CAPABILITY twCap;
GetCapability(twCap, ICAP_XRESOLUTION)

if (twCap.ConType == TWON_ENUMERATION) {
   pTW_ENUMERATION en = (pTW_ENUMERATION) GlobalLock(twCap.hContainer);

   for(int i = 0; i < en->NumItems; i++) {
      if (en->ItemType == TWTY_FIX32)  {
    TW_UINT32 res = (TW_UINT32)(en->ItemList[i*4]); 
    // print res... 
}

Это работает нормально, но последовательность вывода странная:

50 100 150 44 88 176

Я точно знаю, что мой сканер поддерживает 300 DPI, но это значение не 'т вернулся.Что я тут не так делаю?Почему «300» не возвращается последовательно, хотя я могу установить его программно?

1 Ответ

2 голосов
/ 11 октября 2011

Код, который вы показали, берет только младший байт разрешений, а затем преобразует его в целое число (указатель указывает на символ, поэтому строка выбирает только символ, а затем преобразует его в целое число).

Вы должны указать, что указатель указывает на значения TW_UNIT32 ДО чтения значения.

Например, число 44 является младшим байтом числа 300 (300 DPI)

Следующий код должен делатьэто:

TW_UINT32 res = ((TW_UINT32*)(en->ItemList))[i];

или

TW_UINT32 res = *((TW_UINT32*)(en->ItemList + i * 4));
...