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

由于

有帮助吗?

解决方案

我使用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;
}

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

我希望它适合你!

其他提示

它应该有效。

但不幸的是,我们并没有生活在一个完美的世界里。 TWAIN车手是那里最多的车手。使用TWAIN控制扫描过程一直是一个令人头疼的问题,因为大多数驱动程序在没有扫描对话框的情况下从未进行过测试。

据我所知,还没有针对twain-drivers的测试套件,因此每个驱动程序的行为都会略有不同。

我在90年代写了一个OCR应用程序,并且还必须处理这些问题。我最终得到的是一个受支持的扫描仪列表和一个带有批次黑客的扫描仪模块,以及每个不同驱动程序的解决方法。

以ICAP_XRESOLUTION为例:TWAIN文档sais你需要将分辨率作为32位浮点数发送。您是否尝试使用整数来设置它?或者将其作为float发送,但将整数的位表示放入float中,反之亦然。所有这些都适用于您正在使用的驾驶员。或者根本无法发挥作用。

我怀疑从那时起情况发生了很大变化。祝你好好运用至少一半的机器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top