Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检测扫描图像所属的摄像机_C++_Leadtools Sdk - Fatal编程技术网

C++ 检测扫描图像所属的摄像机

C++ 检测扫描图像所属的摄像机,c++,leadtools-sdk,C++,Leadtools Sdk,我正在使用Leadtools 20 API控制扫描仪并扫描一些文档。我有两个问题。1-使用带有回调函数的L\u twainquire时,该函数从扫描仪接收图像,并不断返回SUCCESS以获取下一幅图像。回调函数中是否存在确定图像是来自前摄像头还是后摄像头的方法?2-是否有方法强制扫描仪仅使用后摄像头进行扫描 谢谢您Sam如果使用双面扫描仪时您指的是扫描文档的两面,答案如下: 要知道位图回调中当前正在处理纸张的哪一面,可以在回调函数中使用以下代码: 强制特定侧扫描可以使用CAP_CAMERASID

我正在使用Leadtools 20 API控制扫描仪并扫描一些文档。我有两个问题。
1-使用带有回调函数的
L\u twainquire
时,该函数从扫描仪接收图像,并不断返回
SUCCESS
以获取下一幅图像。回调函数中是否存在确定图像是来自前摄像头还是后摄像头的方法?
2-是否有方法强制扫描仪仅使用后摄像头进行扫描


谢谢您
Sam

如果使用双面扫描仪时您指的是扫描文档的两面,答案如下:

  • 要知道位图回调中当前正在处理纸张的哪一面,可以在回调函数中使用以下代码:
  • 强制特定侧扫描可以使用CAP_CAMERASIDE和CAP_CAMERAENABLED功能的组合来完成,如中所述
  • 引用该文件:

    要启用仅底部扫描,请将CAP_CAMERASIDE设置为TWCS_bottom并 将CAP_CAMERAENABLED设置为TRUE,然后将CAP_CAMERASIDE设置为TWCS_TOP和 将CAP_CAMERAENABLED设置为FALSE

    如果您的意思是您有一台带有两个Twain相机源(前后)的计算机,答案如下:

  • 要知道调用
    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;
    }