调整多留输出导致颜色模式出问题

This commit is contained in:
mo1027728827@qq.com 2022-06-02 11:47:44 +08:00
parent d93d82f5ec
commit ecb8cce5b8
8 changed files with 54 additions and 23 deletions

View File

@ -16,7 +16,6 @@ g_color_mode[] =
},
g_multi_out[] =
{
{OPTION_VALUE_DLSC_W, MULTI_OUT_NOT},
{OPTION_VALUE_DLSC_CS_HD_HB, MULTI_OUT_ALL},
{OPTION_VALUE_DLSC_CS_HD, MULTI_COLOR_AND_GRAY},
{OPTION_VALUE_DLSC_CS_HB, MULTI_COLOR_AND_BW},
@ -182,7 +181,7 @@ int match_best_multi_out(std::string& val, bool* exact)
bool yes = true;
int ind = INVOKE_MATCH(g_multi_out, val, yes);
SET_DEFAULT_ON_FAIL(g_multi_out, ind, val, MULTI_OUT_NOT);
SET_DEFAULT_ON_FAIL(g_multi_out, ind, val, MULTI_OUT_ALL);
if (exact)
*exact = yes;

View File

@ -143,7 +143,6 @@ std::string color_mode_string(int clr_mode);
//#define HUAGAO_SETTING_STR_MULTI_GRAY_ADN_BW "灰度+黑白"
enum
{
MULTI_OUT_NOT = -1,
MULTI_OUT_ALL = 0,
MULTI_COLOR_AND_GRAY,
MULTI_COLOR_AND_BW,

View File

@ -91,7 +91,7 @@ hg_scanner::hg_scanner(ScannerSerial serial
, bright_(128), contrast_(4), gamma_(1.0f), threshold_(40), anti_noise_(8), margin_(5)
, fractate_level_(50), ui_ev_cb_(ui_default_callback), scan_life_(NULL)
, notify_setting_result_(false), user_cancel_(false), cb_mem_(true), test_1_paper_(false)
, setting_count_(0),img_type_(""), online_(false),is_quality_(-1),is_color_fill(false),is_multiout(false)
, setting_count_(0),img_type_(""), online_(false),is_quality_(-1),is_color_fill(false),is_multiout(false),save_multiout(OPTION_VALUE_DLSC_CS_HD_HB)
{
final_path_ = hg_log::ini_get("paths", "final_img");
if(final_path_.empty())
@ -934,26 +934,30 @@ int hg_scanner::setting_color_mode(void* data)
int hg_scanner::setting_multi_out(void *data)
{
is_multiout = *((bool*)data);
int val = image_prc_param_.bits.color_mode;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "image_prc_param_.bits.multi_out %d ", image_prc_param_.bits.multi_out);
if (!is_multiout)
on_color_mode_changed(val);
return SCANNER_ERR_OK;
}
int hg_scanner::setting_multi_out_type(void *data)
{
int ret = SCANNER_ERR_OK;
if(image_prc_param_.bits.color_mode != 2)
{
ret = SCANNER_ERR_INVALID_PARAMETER;
return ret;
}
std::string str((char*)data);
bool exact = check_range(setting_map_[HG_BASE_SETTING_INDEX_MULTI_OUT], str);
int color;
image_prc_param_.bits.multi_out = match_best_multi_out(str,NULL);
save_multiout = str;
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "set multi_out type from %s to %s = %s\n", multi_out_string(image_prc_param_.bits.multi_out).c_str(), (char*)data, hg_scanner_err_name(ret));
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW)
color = COLOR_MODE_256_GRAY;
else
color = COLOR_MODE_24_BITS;
@ -1797,7 +1801,19 @@ int hg_scanner::save_final_image(hg_imgproc::LPIMGHEAD head, void* buf)
std::string bw("");
final_img_index_++;
if (image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE)
bool is_1bit = false;
if (image_prc_param_.bits.multi_out == MULTI_OUT_ALL && is_multiout)
{
if(final_img_index_%3 == 0)
is_1bit = true;
}
else if ((image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW) && is_multiout)
{
if(final_img_index_%2 == 0)
is_1bit = true;
}
if (img_conf_.pixtype == 0 || (is_1bit && is_multiout))
{
int old = head->line_bytes;
bw = bmp_821((unsigned char*)buf, head->width, head->height, &head->line_bytes, async_io_);

View File

@ -100,6 +100,7 @@ class hg_scanner
{
bool notify_setting_result_;
std::string name_;
std::string save_multiout; //保存多留输出类型
sane_callback ui_ev_cb_;
do_when_born_and_dead<hg_scanner>* scan_life_;

View File

@ -771,7 +771,7 @@ void hg_scanner_200::image_process(std::shared_ptr<tiny_buffer>& buffer)
//HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"图像拆分开启\r\n");
}
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !image_prc_param_.bits.multi_out)
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !is_multiout)
{
if(img_conf_.automaticcolor)
{
@ -1137,10 +1137,14 @@ else
ic.multiOutput = MultiOutput::Unused;
ic.fadeback = false;
}
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && (image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS))
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout)
{
ic.pixtype = 1;
}
else if ((image_prc_param_.bits.multi_out == MULTI_OUT_ALL ||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_GRAY||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW) && is_multiout)
{
ic.pixtype = 2;
}
img_conf_ = ic;
agreement();

View File

@ -674,7 +674,7 @@ void hg_scanner_239::image_process(std::shared_ptr<tiny_buffer>& buff)
,img_conf_.is_duplex);
}
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !image_prc_param_.bits.multi_out)
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !is_multiout)
{
if(img_conf_.automaticcolor)
{
@ -891,10 +891,16 @@ else
ic.multiOutput = MultiOutput::Unused;
ic.fadeback = false;
}
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && (image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS))
//多留输出的处理
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout)
{
ic.pixtype = 1;
}
else if ((image_prc_param_.bits.multi_out == MULTI_OUT_ALL ||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_GRAY||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW) && is_multiout)
{
ic.pixtype = 2;
}
{
std::lock_guard<std::mutex> lock(io_lock_);
@ -1173,7 +1179,6 @@ int hg_scanner_239::on_color_mode_changed(int& color_mode)
{
dev_conf_.g200params.color = 1;
}
HGSCANCONF d = dev_conf_;
if (image_prc_param_.bits.rid_color != RID_COLOR_NONE
@ -1198,7 +1203,6 @@ int hg_scanner_239::on_color_mode_changed(int& color_mode)
}
if(color_mode == -1)
ret = writedown_device_configuration(&d);
return ret;
}
int hg_scanner_239::on_paper_changed(int& paper)

View File

@ -736,7 +736,7 @@ void hg_scanner_300::image_process(std::shared_ptr<tiny_buffer>& buffer)
//HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"图像拆分开启\r\n");
}
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !image_prc_param_.bits.multi_out)
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !is_multiout)
{
if(img_conf_.automaticcolor)
{
@ -1055,10 +1055,14 @@ else
ic.multiOutput = MultiOutput::Unused;
ic.fadeback = false;
}
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && (image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS))
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout)
{
ic.pixtype = 1;
}
else if ((image_prc_param_.bits.multi_out == MULTI_OUT_ALL ||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_GRAY||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW) && is_multiout)
{
ic.pixtype = 2;
}
img_conf_ = ic;

View File

@ -733,7 +733,7 @@ void hg_scanner_400::image_process(std::shared_ptr<tiny_buffer>& buffer)
//VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "图像拆分开启:%s\n",hg_scanner_err_name(ret));
}
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !image_prc_param_.bits.multi_out)
if (!image_prc_param_.bits.split || !image_prc_param_.bits.rid_red || !is_multiout)
{
if(img_conf_.automaticcolor)
{
@ -1071,10 +1071,14 @@ void hg_scanner_400::writedown_image_configuration(void)
ic.multiOutput = MultiOutput::Unused;
ic.fadeback = false;
}
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && (image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS))
if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout)
{
ic.pixtype = 1;
}
else if ((image_prc_param_.bits.multi_out == MULTI_OUT_ALL ||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_GRAY||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW) && is_multiout)
{
ic.pixtype = 2;
}
img_conf_ = ic;
int ret = agreement((TwSS)img_conf_.papertype,img_conf_.paperAlign);