TWAIN规范的第四章

发布时间 : 星期日 文章TWAIN规范的第四章更新完毕开始阅读

注:如果程序想防止用户使用文档传送机,程序应使用MSG_SET将 CAP_FEEDERENABLED性能设置为FALSE。

4.4.2.2 检查是否有图像已准备好被获取

源设置中是否有图像已准备好被获取与是否有可用的文档传送机无关,这有三种可能: 1. 源无法辨别是否有可用图像。 2. 图像可用于获取,或 3. 无图像可用于获取。

要检测这些情况,请先判断源是否能辨别是否有图像可用于获取,然后再判断是否有可用图像。以下性能用于完成此工作: CAP_PAPERDETECTABLE 判断源是否能辨别文档是否已加载。

1. 使用DG_CONTROL / DAT_CAPABILITY / MSG_GET操作。 2. 将TW_CAPABILITY.Cap 域设置为 CAP_PAPERDETECTABLE。

3. 源返回TWRC_SUCCESS及一个HContainer结构。若它能够检测可用于获取的文档,则值为TRUE。如果返回值为WRC_FAILURE 和 TWCC_CAPUNSUPPORTED 或 TWCC_BADVALUE,则源不能检测文档是否已加载。

注:CAP_PAPERDETECTABLE可独立于 CAP_FEEDERENABLED进行使用。同样,源并不一定需要一个自动传送机才能支持此性能。一个能够检测是否有纸张在台板上的扫描仪也将返回TRUE。

程序不能设置此性能,源只在必要时报告。 CAP_FEEDERLOADED 判断传送机中是否有文档加载。

1. 使用 DG_CONTROL / DAT_CAPABILITY / MSG_GET操作。 2. 将 TW_CAPABILITY.Cap 域设置为 CAP_FEEDERLOADED。 3. 有文档加载时源将返回TRUE。

注: 对CAP_FEEDERENABLED 和 CAP_PAPERDETECTABLE都一样,TRUE或FALSE并不表示可否使用此性能,FALSE只是表示没有可用文档或无法辨别。为了得到确定的答案,请务必先检查CAP_PAPERDETECTABLE 。

4.4.2.3 控制预扫描

使用低端扫描仪时,CPU通常都能实时或在不同纸张的扫描间隔期间处理输入的图像数据。但是,在使用高效扫描仪时,CPU可用于处理一张纸的图像数据的时间可能显著地少于扫描的时间。如果扫描仪能够扫描CPU将要获取的图像的头数据,则能够缓解此问题。此数据在CPU处理当前图像时缓存到扫描仪本地缓存或通过DMA保存到内存中。

不过预扫描并不总是适合的,因为是否需要继续扫描有时候是由当前扫描的图像决定的。例如扫描程序可能要求在遇到空白纸张时终止扫描。如果启用预扫描,空白纸张之后的一张或多张纸张都有可能被扫描并传送到扫描仪的输出区,从应用程序设计的观点来说这种行为是错误的。 我们已经阐述了控制预扫描功能的必要性。但是,一个简单的“启用预扫描”命令并不足以控制一些扫描仪提供的丰富功能。TWAIN的文档输送模型将每个图像的传输分为三个阶段: 1. 图像在输入区域中。此动作由用户完成(例如将一叠纸放到自动传送机中)。 2. 图像准备好被扫描。此行为导致下一个可用图像被输送到扫描区域的起点处。设置CAP_AUTOFEED性能以自动将图像输送到扫描区域的起点。

3. 图像被扫描。此行为导致图像被扫描。例如,DG_IMAGE / DAT_IMAGEMEMXFER / MSG_GET操作启动图像传输(通过内在缓存传输给程序)。通过设置 CAP_AUTOSCAN性能,TWAIN允许源将图像预取至源本地的存储器(即使程序尚未请求)。 CAP_AUTOFEED

启用源的自动传送文档进程。

1. 使用DG_CONTROL / DAT_CAPABILITY / MSG_SET操作。

2. 将 TW_CAPABILITY.Cap 域设置为 CAP_AUTOFEED 并将性能设置为TRUE。 3. 设置为TRUE时,源的行为是在页面的所有区域都已获取后弹出此页面,然后传送下一页面。有图像数据可获取(并且源处于启用状态)时此自动传送过程将一直持续。 CAP_FEEDERLOADED为TRUE表示纸张在文档传送机中。

注:要使用此性能,CAP_FEEDERENABLED 必须设置为TRUE,否则源将返回 TWRC_FAILURE / TWCC_CAPUNSUPPORTED。 CAP_AUTOSCAN

启用源的文档自动扫描进程。

? 使用DG_CONTROL / DAT_CAPABILITY / MSG_SET。

? 将TW_CAPABILITY.Cap域设置为CAP_AUTOSCAN并将性能设置为TRUE。

? 设置为TRUE时,源的行为是在页面的所有区域都已获取后弹出页面,并开始扫描下一页面。有图像数据可获取(并且源处于启用状态)时此自动扫描过程将一直持续。

注:将 CAP_AUTOSCAN 设置为TRUE将使 CAP_AUTOFEED 隐式被置为TRUE。 应用程序使用文档自动传送时:

? 将CAP_XFERCOUNT设置为-1以表示程序可接受多个图像。

? 预期源返回的TW_PENDINGXFERS.Count值为-1,表示源有更多的图像用于传输但数量未知。

? 使用文档自动传送不会导致多文档传输过程产生变化。 4.4.2.4 程序控制文档传送

除了文档自动传送以外,TWAIN也提供了由应用程序手动控制文档传送的选项。这只有在源同意状态5和6下协商(通过CAP_EXTENDEDCAPS)以下性能时才有可能。如果CAP_AUTOFEED 为TRUE,将影响到尖对以下性能的响应。 CAP_FEEDPAGE

? 如果程序将此性能设置为TRUE,源将弹出当前页面并输送下一页面(若存在)。 ? 为了能正常工作,要求 CAP_FEEDERENABLED 和CAP_FEEDERLOADED为TRUE。 ? 在 CAP_AUTOFEED为TRUE时也将是同样的动作。

? 弹出的页面对应程序正在获取或将要获取的图像,因此,若 CAP_AUTOSCAN 为TRUE并且有不确定数量的页面已被扫描,则弹出的页面可能是已经扫描到源的本地缓存中的页面。 CAP_CLEARPAGE

? 如果程序将此性能设置为TRUE,源将弹出当前页面并使传送区域为空(即无可获取图像)。 ? 为了能像描述的那样工作,要求 CAP_FEEDERENABLED 为TRUE。 ? 若 CAP_AUTOFEED 为TRUE,则下一页面将被推送至获取区域。 ? 若CAP_AUTOSCAN为TRUE,设置此性能将返回TWRC_FAILURE及TWCC_BADVALUE。 CAP_REWINDPAGE

? 若设置此性能为TRUE,源将把当前页送回输入区域并把输出区域中的最后一个页面送回获取区域。

? 为了能正常工作,要求 CAP_FEEDERENABLED 为TRUE。

? 若 CAP_AUTOFEED 为TRUE,则将在页面的所有区域已获取后进行常规的传送。 ? 回溯的页面对应程序正在获取的图像。因此,若CAP_AUTOSCAN为TRUE,并且不确定数量的页面已被扫描,则回溯的页面可能对应已扫描至源的本地缓存中的页面。

4.5 传送压缩数据

在使用缓存传输模式时,某些源可能支持以压缩格式传送数据。 为确定源是否支持传送压缩数据并设置其性能:

1. 使用 DG_CONTROL / DAT_CAPABILITY / MSG_GET操作。 2. 将TW_CAPABILITY.Cap 域设置为 ICAP_COMPRESSION。

3. 源通过TW_CAPABILITY.hContainer指向的一个容器指定所支持的压缩方式信息。可选的压缩方式的标识符均带前缀TWCP_(例如TWCP_PACKBITS),可在第8章的Constants部分和TWAIN.H文件中找到。

4. 若希望协商使用某种压缩方式,请使用 DG_CONTROL / DAT_CAPABILITY / MSG_SET操作。

TW_IMAGEMEMXFER结构用于DG_IMAGE / AT_IMAGEMEMXFER / MSG_GET操作。 传输压缩数据流时(边压缩边传输):

? BytesPerRow域应设置为0,Columns、Rows、XOffset和YOffset域应包含TWON_DONTCARE32 以表示这些域持有无效值(当前图形的尺寸可通过DG_IMAGE / DAT_IMAGEINFO / MSG_GET获取)。

? 缓冲区总是由源进行完整的填充。对于压缩数据则很可能有超过一条的不完整数据被写入缓存。

? 应用程序必须负责销毁缓存。 传输压缩数据块时(先压缩再传输):

? 此结构中的所有域包含有效值。BytesPerRow,Columns,Rows,XOffset和YOffset描述解压因子,Compression和BytesWritten描述压缩因子。

? 与压缩数据流的传输不同的是,此时由源分配传输缓冲。这允许源创建不同尺寸的缓冲区以完整地(未分割到一系列的缓冲区中)将压缩数据传输给程序。在这种情况下,程序应这样设置

联系合同范文客服:xxxxx#qq.com(#替换为@)