如何在C++中使用TWAIN设置扫描的DPI

net*_*719 3 c++ twain image-scanner

我在C++中使用TWAIN,我正在尝试手动设置DPI,以便用户不会显示扫描对话框,而是页面只扫描设置的默认值并为其存储.我需要手动设置DPI,但我似乎无法让它工作.我尝试使用ICAP_XRESOLUTION和ICAP_YRESOLUTION设置功能.当我查看图像的信息时,无论我将其设置为使用ICAP,它总是显示相同的分辨率.是否有另一种方法来设置扫描图像的分辨率,还是只需要在文档中找不到我需要的其他步骤?

谢谢

Dan*_*eer 6

我使用ICAP_XRESOLUTION和ICAP_YRESOLUTION来设置扫描仪的扫描分辨率,它至少适用于许多HP扫描仪.

代码片段:

float x_res = 1200;
cap.Cap = ICAP_XRESOLUTION;
cap.ConType = TWON_ONEVALUE;
cap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE));
if(cap.hContainer)
{
    val_p = (pTW_ONEVALUE)GlobalLock(cap.hContainer);
    val_p->ItemType = TWTY_FIX32;
    TW_FIX32 fix32_val = FloatToFIX32(x_res);
    val_p->Item = *((pTW_INT32) &fix32_val);
    GlobalUnlock(cap.hContainer);
    ret_code = SetCapability(cap);
    GlobalFree(cap.hContainer);
}

TW_FIX32 FloatToFIX32(float i_float)
{
    TW_FIX32 Fix32_value;
    TW_INT32 value = (TW_INT32) (i_float * 65536.0 + 0.5);
    Fix32_value.Whole = LOWORD(value >> 16);
    Fix32_value.Frac = LOWORD(value & 0x0000ffffL);
    return Fix32_value;
}
Run Code Online (Sandbox Code Playgroud)

该值应为TW_FIX32类型,这是由twain定义的浮点格式(奇怪但真实).

我希望这个对你有用!

  • 好吧,我为了生活而写TWAIN工具包,所以我不是一个正常的人 - 但这是什么"几乎无处记录"?TWAIN规范说ICAP_XRESOLUTION采用FIX32值.您可以通过发送MSG_SET来设置功能.请参阅"从应用程序控制TWAIN会话",其中提供了用于设置功能的C代码.Dani的代码几乎与TWAIN规范中的代码完全相同,而FloatToFIX32则是规范中的*verbatim*.TWAIN*是一个可怕的书面规范,没有争论,但是......当然你没有在没有阅读规范的情况下尝试编程到TWAIN API? (3认同)