146 lines
4.4 KiB
C++
146 lines
4.4 KiB
C++
#include "multi_out.h"
|
|
|
|
|
|
#include <huagao/hgscanner_error.h>
|
|
#include <sane/sane_ex.h>
|
|
#include <base/utils.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\",\"pos\":40,\"fix-id\":34817,\"ui-pos\":10,\"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\",\"pos\":41,\"fix-id\":34818,\"ui-pos\":11,\"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\"},\"mode\":{\"cat\":\"base\",\"group\":\"base\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"pos\":50,\"fix-id\":34819,\"ui-pos\":15,\"auth\":0,\"size\":24,\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend\":\"is-multiout!=true\"}}"
|
|
};
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
multi_out::multi_out(bool weaker) : image_processor("multi_out")
|
|
{
|
|
if(weaker)
|
|
return;
|
|
|
|
ADD_THIS_JSON();
|
|
}
|
|
multi_out::~multi_out()
|
|
{}
|
|
|
|
void multi_out::refresh_final_mode(void)
|
|
{
|
|
if(multi_)
|
|
{
|
|
coef_ = 2;
|
|
if(multi_str_ == WORDS_MULTI_OUT_GBW)
|
|
{
|
|
clr_ = false;
|
|
gray_ = bw_ = true;
|
|
}
|
|
else if(multi_str_ == WORDS_MULTI_OUT_CG)
|
|
{
|
|
clr_ = gray_ = true;
|
|
bw_ = false;
|
|
}
|
|
else if(multi_str_ == WORDS_MULTI_OUT_CBW)
|
|
{
|
|
clr_ = bw_ = true;
|
|
gray_ = false;
|
|
}
|
|
else
|
|
{
|
|
coef_ = 3;
|
|
clr_ = gray_ = bw_ = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
coef_ = 1;
|
|
if(mode_str_.find(WORDS_COLOR_BW) != std::string::npos)
|
|
{
|
|
clr_ = gray_ = false;
|
|
bw_ = true;
|
|
}
|
|
else if(mode_str_.find(WORDS_COLOR_GRAY) != std::string::npos)
|
|
{
|
|
clr_ = bw_ = false;
|
|
gray_ = true;
|
|
}
|
|
else
|
|
{
|
|
clr_ = true;
|
|
gray_ = bw_ = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
int multi_out::set_value(const char* name/*nullptr for all options*/, void* val/*nullptr for restore*/)
|
|
{
|
|
int ret = SCANNER_ERR_OK;
|
|
|
|
if(strcmp(name, SANE_OPT_NAME(IS_MULTI_OUT)) == 0)
|
|
{
|
|
enabled_ = multi_ = *(bool*)val;
|
|
refresh_final_mode();
|
|
}
|
|
else if(strcmp(name, SANE_OPT_NAME(MULTI_OUT_TYPE)) == 0)
|
|
{
|
|
multi_str_ = (char*)val;
|
|
refresh_final_mode();
|
|
}
|
|
else if(strcmp(name, SANE_OPT_NAME(COLOR_MODE)) == 0)
|
|
{
|
|
mode_str_ = (char*)val;
|
|
refresh_final_mode();
|
|
}
|
|
else
|
|
ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
|
|
|
return ret;
|
|
}
|
|
image_processor* multi_out::copy_weaker(void)
|
|
{
|
|
multi_out *weaker = new multi_out(true);
|
|
|
|
weaker->pos_ = pos_;
|
|
weaker->enabled_ = enabled_;
|
|
|
|
weaker->multi_ = multi_;
|
|
weaker->clr_ = clr_;
|
|
weaker->gray_ = gray_;
|
|
weaker->bw_ = bw_;
|
|
weaker->coef_ = coef_;
|
|
|
|
return weaker;
|
|
}
|
|
int multi_out::process(std::vector<PROCIMGINFO>& in, std::vector<PROCIMGINFO>& out)
|
|
{
|
|
int cnt = in.size() * coef_,
|
|
index = 0;
|
|
|
|
for(auto& v: in)
|
|
{
|
|
if(clr_ && v.info.channels == 3)
|
|
{
|
|
PROCIMGINFO o = v;
|
|
|
|
o.info.prc_stage = get_position();
|
|
o.info.prc_time = 0;
|
|
o.info.pos.paper_all = cnt;
|
|
o.info.pos.ind_in_paper = index++;
|
|
|
|
out.push_back(o);
|
|
}
|
|
if(gray_)
|
|
{
|
|
|
|
}
|
|
if(bw_)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
return SCANNER_ERR_OK;
|
|
}
|