【问题标题】:How do I enumerate resolutions supported via TWAIN如何枚举通过 TWAIN 支持的分辨率
【发布时间】:2011-10-11 14:34:52
【问题描述】:

我必须通过 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”却没有按顺序返回?

【问题讨论】:

  • 请大大缩小问题范围。

标签: c++ scanning twain


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多