C++ 检测扫描图像所属的摄像机
我正在使用Leadtools 20 API控制扫描仪并扫描一些文档。我有两个问题。C++ 检测扫描图像所属的摄像机,c++,leadtools-sdk,C++,Leadtools Sdk,我正在使用Leadtools 20 API控制扫描仪并扫描一些文档。我有两个问题。1-使用带有回调函数的L\u twainquire时,该函数从扫描仪接收图像,并不断返回SUCCESS以获取下一幅图像。回调函数中是否存在确定图像是来自前摄像头还是后摄像头的方法?2-是否有方法强制扫描仪仅使用后摄像头进行扫描 谢谢您Sam如果使用双面扫描仪时您指的是扫描文档的两面,答案如下: 要知道位图回调中当前正在处理纸张的哪一面,可以在回调函数中使用以下代码: 强制特定侧扫描可以使用CAP_CAMERASID
1-使用带有回调函数的
L\u twainquire
时,该函数从扫描仪接收图像,并不断返回SUCCESS
以获取下一幅图像。回调函数中是否存在确定图像是来自前摄像头还是后摄像头的方法?2-是否有方法强制扫描仪仅使用后摄像头进行扫描
谢谢您
Sam如果使用双面扫描仪时您指的是扫描文档的两面,答案如下:
L\u TwainAcquire()
时哪个Twain源(例如照相机)触发了Twain位图回调,可以使用
L\u TwainGetSources()
函数,使用LTWAIN\u SOURCE\u ENUMERATE\u DEFAULT
标志获取当前选定的Twain设备。这可以在位图回调中完成,如下代码所示:L\u TwainSelectSource()
函数来强制扫描,如下所示:L_TwainGetSources(twainSession, TwainSourceInfoCallback, sizeof LTWAINSOURCEINFO, LTWAIN_SOURCE_ENUMERATE_ALL, NULL);
每个Twain源将触发一次源信息回调。它可以这样实现:
L_INT EXT_CALLBACK TwainSourceInfoCallback(HTWAINSESSION hSession, pLTWAINSOURCEINFO pSourceInfo, L_VOID * pUserData)
{
OutputDebugString(pSourceInfo->pszTwnSourceName); // You can save the names of Twain Sources into global variables if you like
OutputDebugString("\n");
return SUCCESS;
}
我想我可能还不太清楚我需要什么。我知道
L\u TwainSelectSource()
。它会提供所选扫描仪的名称,但这不是我需要的。有时扫描仪内部有两个摄像头,同时扫描页面的两面(如Fujitsu fi-7900),回调会被调用两次。一次用于纸张顶部,一次用于纸张底部。我需要找出:1-回调是针对正面还是背面调用的?和2-强制扫描仪仅扫描页面背面。我认为这与使用TWFY_CAMERABOTTOM
有关,但我不确定如何使用。答案已被修改,以涵盖您的问题,以及可能对其他人有用的原始答案。感谢编辑后的答案。它回答了我的第二个问题,并向我指出了可能回答第一个问题的L\u TwainGetExtendedImageInfo()
。我可以在位图回调中使用L\u TwainGetExtendedImageInfo()
来获取页面侧吗?如果是的话,你能修改答案以显示它是如何完成的吗?提前谢谢。再次更新。很抱歉,我们没有在第一次编辑中涵盖您的所有问题。是的,我们需要免费提供两样东西。TW_EXTIMAGEINFO结构是用malloc()分配的,因此我们需要在处理完free()后调用它。(或使用GlobalAlloc和GlobalFree等)但在释放它之前,我们必须释放其中由L_TwainGetExtendedImageInfo()分配的TW_INFO[]数组,因此我们必须在释放TW_EXTIMAGEINFO结构本身之前调用L_TwainFeeExtendedImageInfostructure()。
LTWAINSOURCE TwainSource;
TwainSource.uStructSize = sizeof LTWAINSOURCE;
TwainSource.pszTwainSourceName = pszRearCameraTwainSourceName;
L_TwainSelectSource(twainSession, &TwainSource);
// Now L_TwainAcquire() will capture from Rear Camera
L_TwainGetSources(twainSession, TwainSourceInfoCallback, sizeof LTWAINSOURCEINFO, LTWAIN_SOURCE_ENUMERATE_ALL, NULL);
L_INT EXT_CALLBACK TwainSourceInfoCallback(HTWAINSESSION hSession, pLTWAINSOURCEINFO pSourceInfo, L_VOID * pUserData)
{
OutputDebugString(pSourceInfo->pszTwnSourceName); // You can save the names of Twain Sources into global variables if you like
OutputDebugString("\n");
return SUCCESS;
}