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 に答える