开发者

How do I enumerate resolutions supported via TWAIN

I have to enumerate DPI's supported by scanner via TWAIN interface.

// after Acquire is called... 
TW_CAPABI开发者_C百科LITY 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... 
}

That works fine but output sequence is strange:

50 100 150 44 88 176

I know exactly that my scanner supports 300 DPI but this value doesn't returned. What I do wrong here? Why "300" is not returned in sequence though I can set it programmatically?


The code you shown takes just the lower byte of the resolutions, and then converts it to integer (the pointer points to chars, so the line fetch just a char and then converts it to integer).

You must specify that the pointer points to TW_UNIT32 values BEFORE reading the value.

The number 44 for instance, is the lower byte of the number 300 (300 DPI)

The following code should do it:

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

or

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜