如何枚举通过TWAIN支持的分辨率

时间:2011-10-11 14:34:53

标签: c++ scanning twain

我必须通过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”没有按顺序返回,虽然我可以通过编程方式设置它?

1 个答案:

答案 0 :(得分:2)

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

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

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

以下代码应该这样做:

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

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