C++ 如何检查扫描仪支持的图像格式?

C++ 如何检查扫描仪支持的图像格式?,c++,winapi,twain,C++,Winapi,Twain,我想通过TWAIN接口获得扫描仪支持的文件格式。有一个如何获取支持的格式的示例: GetCapability(ICAP_IMAGEFILEFORMAT, unTest); CString strType; strType.Format("Type Supported %d\n", unTest); 但我想这里有点不对劲,因为ICAP_IMAGEFILEFORMAT成员没有一点遮罩: #define TWFF_TIFF 0 /* Tagged Image File Forma

我想通过TWAIN接口获得扫描仪支持的文件格式。有一个如何获取支持的格式的示例:

GetCapability(ICAP_IMAGEFILEFORMAT, unTest);
CString strType;
strType.Format("Type Supported %d\n", unTest);
但我想这里有点不对劲,因为ICAP_IMAGEFILEFORMAT成员没有一点遮罩:

#define TWFF_TIFF        0    /* Tagged Image File Format     */
#define TWFF_PICT        1    /* Macintosh PICT               */
#define TWFF_BMP         2    /* Windows Bitmap               */
#define TWFF_XBM         3
#define TWFF_JFIF        4    /* JPEG File Interchange Format */
#define TWFF_FPX         5    /* Flash Pix                    */
...
所以,如果扫描仪支持TIFF、PICT、BMP和JFIF,则不可能在一次调用中返回此类信息


如何通过扫描仪获取支持的格式列表

我相信您必须查询DS(例如,尝试设置您想要的值)以查看您想要的格式是否受支持,然后根据结果您可以构建列表或受支持的格式。我认为这是msgget容器的方式

TW_ONEVALUE——当前值和默认值为 巧合。此类型的可用值的范围 能力就是这个单一的价值。例如,一个 指示文档存在的功能 给料机可以是这种类型

规范中ICAP_IMAGEFILEFORMAT部分的描述似乎暗示,您只能设置为单个值,或返回单个值:

应用

使用此ICAP确定哪些格式可用于文件传输,并设置文件传输的上下文 其他能力谈判,如ICAP_压缩。 确保使用DG_控制/DAT_设置文件xfer/MSG_设置操作指定 用于特定采集的格式

来源

如果不支持,则返回TWRC\u FAILURE/TWCC\u CAPUNSUPPORTED。 如果不支持该操作,则返回TWRC_FAILURE,TWCC_CAPBADOPERATION。(见 DG_控制/DAT_能力/MSG_查询支持)


不管怎么说,我可能是误译了,但在我看来就是这样

我认为在一次调用中获取所有受支持的文件格式是可行的,因为“Container for MSG_GET”和“Container for MSG_SET”都支持TW_枚举。

是的,你是对的。为了返回枚举值,我必须深入研究GetCapability实现。