#include "multi_out.h" #include #include #include ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 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& in, std::vector& 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; }