2

我必须通过 TWAIN 接口枚举扫描仪支持的 DPI。

// 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”?

4

1 回答 1

2

您显示的代码仅采用分辨率的低字节,然后将其转换为整数(指针指向字符,因此该行仅获取一个字符,然后将其转换为整数)。

在读取值之前,您必须指定指针指向 TW_UNIT32 值。

例如,数字 44 是数字 300 (300 DPI) 的低字节

下面的代码应该做到这一点:

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

或者

TW_UINT32 res = *((TW_UINT32*)(en->ItemList + i * 4));
于 2011-10-11T19:39:23.290 回答