91 lines
4.4 KiB
C++
91 lines
4.4 KiB
C++
#include "multi_out.h"
|
|
|
|
#include <json/gb_json.h>
|
|
#include <huagao/hgscanner_error.h>
|
|
#include <sane/sane_option_definitions.h>
|
|
#include <lang/app_language.h>
|
|
|
|
|
|
|
|
|
|
static std::string device_opt_json[] = {
|
|
"{\"is-multiout\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"fix-id\":34817,\"auth\":0,\"size\":4,\"cur\":false,\"default\":false},\"multiout-type\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"fix-id\":34818,\"auth\":0,\"enabled\":false,\"size\":66,\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend\":\"is-multiout==true\"},\"mo-threshold\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u591a\\u6d41\\u9ed1\\u767d\\u9608\\u503c\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u9608\\u503c\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":40,\"default\":40,\"range\":{\"min\":1,\"max\":255,\"step\":1},\"depend\":\"is-multiout==true\"},\"mo-bin-type\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u65b9\\u6cd5\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u65b9\\u6cd5\",\"type\":\"string\",\"auth\":0,\"size\":28,\"cur\":\"\\u5355\\u9608\\u503c\",\"default\":\"\\u5355\\u9608\\u503c\",\"range\":[\"\\u5355\\u9608\\u503c\",\"\\u5927\\u6d25\\u9608\\u503c\",\"\\u9ad8\\u65af\\u5c40\\u90e8\\u81ea\\u9002\\u5e94\",\"\\u5747\\u503c\\u5c40\\u90e8\\u81ea\\u9002\\u5e94\",\"\\u9519\\u8bef\\u6269\\u6563\"],\"depend\":\"is-multiout==true\"},\"mo-bin-block-size\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u5757\\u5927\\u5c0f\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u5757\\u5927\\u5c0f\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":51,\"default\":51,\"range\":{\"min\":5,\"max\":200,\"step\":1},\"depend\":\"is-multiout==true\"},\"mo-bin-const\":{\"cat\":\"base\",\"group\":\"imgp\",\"title\":\"\\u4e8c\\u503c\\u5316\\u5e38\\u91cf\",\"desc\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u9ed1\\u767d\\u56fe\\u50cf\\u65f6\\u7684\\u4e8c\\u503c\\u5316\\u5e38\\u91cf\",\"type\":\"int\",\"auth\":0,\"size\":4,\"cur\":41,\"default\":41,\"range\":{\"min\":5,\"max\":200,\"step\":1},\"depend\":\"is-multiout==true\"}}"
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// image_processor
|
|
multi_outer::multi_outer() : image_processor("multi_outer")
|
|
{
|
|
std::string json("");
|
|
|
|
for (auto& v : device_opt_json)
|
|
json += v;
|
|
|
|
set_opt_json_text(&json[0]);
|
|
enabled_ = false;
|
|
}
|
|
multi_outer::~multi_outer()
|
|
{}
|
|
|
|
int multi_outer::type_from_str(const char* type)
|
|
{
|
|
static struct
|
|
{
|
|
std::string str;
|
|
int type;
|
|
}typemap[] = {
|
|
{ OPTION_VALUE_DLSCLX_CS_HD_HB, IMageMulti::ALL},
|
|
{ OPTION_VALUE_DLSCLX_CS_HD, IMageMulti::COLORGRAY },
|
|
{ OPTION_VALUE_DLSCLX_CS_HB, IMageMulti::COLORBW },
|
|
{ OPTION_VALUE_DLSCLX_HD_HB, IMageMulti::GRAYBW }
|
|
};
|
|
|
|
for (auto& v : typemap)
|
|
{
|
|
if (v.str == type)
|
|
return v.type;
|
|
}
|
|
|
|
return typemap[0].type;
|
|
}
|
|
|
|
int multi_outer::set_value(const char* name, void* val)
|
|
{
|
|
int ret = SCANNER_ERR_OK; // SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
|
|
|
if (strcmp(name, SANE_STD_OPT_NAME_IS_MULTI_OUT) == 0)
|
|
enabled_ = *(bool*)val;
|
|
else if (strcmp(name, SANE_STD_OPT_NAME_MULTI_OUT_TYPE) == 0)
|
|
type_ = multi_outer::type_from_str(to_default_language((char*)val, nullptr));
|
|
else
|
|
ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
|
|
|
return ret;
|
|
}
|
|
void multi_outer::enable(const char* name, bool able)
|
|
{
|
|
enabled_ = able;
|
|
}
|
|
int multi_outer::process(std::vector<PROCIMGINFO>& in, std::vector<PROCIMGINFO>& out)
|
|
{
|
|
int ret = SCANNER_ERR_OK;
|
|
|
|
if (!enabled_)
|
|
out = in;
|
|
else
|
|
{
|
|
IMageMulti multi(type_, threshold_, threshold_type_, block_size_, constant_);
|
|
for (auto& v : in)
|
|
{
|
|
std::vector<cv::Mat> o = multi.apply(v.img);
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
|