From 4a0d2c90947d8f342dd048426b9fd2d2d4813257 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Fri, 29 Mar 2024 18:10:55 +0800 Subject: [PATCH] NEW:update color calculation in printed thumbnails Jira: none Change-Id: Ied8dfd9d10b2dbf57629fc7c78f2c39add073f2e (cherry picked from commit 6a8cf38a51778fbd054df3623454a97856b7de60) --- src/slic3r/GUI/SelectMachine.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 0829f91ad..98350c5b7 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -4127,9 +4127,28 @@ void SelectMachineDialog::change_default_normal(int old_filament_id, wxColour te unsigned char *new_px = (unsigned char *) m_preview_thumbnail_data.pixels.data() + 4 * (rr + c); if (no_light_px[3] == (255 - old_filament_id)) { new_px[3] = origin_px[3]; // alpha - for (size_t i = 0; i < 3; i++) { - unsigned char cur_single_color = i == 0 ? ams_color.Red() : (i == 1 ? ams_color.Green() : ams_color.Blue()); - new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]),0,255); + int origin_rgb = origin_px[0] + origin_px[1] + origin_px[2]; + int no_light_px_rgb = no_light_px[0] + no_light_px[1] + no_light_px[2]; + unsigned char i = 0; + if (origin_rgb >= no_light_px_rgb) {//Brighten up + unsigned char cur_single_color = ams_color.Red(); + new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]), 0, 255); + i++; + cur_single_color = ams_color.Green(); + new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]), 0, 255); + i++; + cur_single_color = ams_color.Blue(); + new_px[i] = std::clamp(cur_single_color + (origin_px[i] - no_light_px[i]), 0, 255); + } else {//Dimming + float ratio = origin_rgb / (float) no_light_px_rgb; + unsigned char cur_single_color = ams_color.Red(); + new_px[i] = std::clamp((int)(cur_single_color * ratio), 0, 255); + i++; + cur_single_color = ams_color.Green(); + new_px[i] = std::clamp((int) (cur_single_color * ratio), 0, 255); + i++; + cur_single_color = ams_color.Blue(); + new_px[i] = std::clamp((int) (cur_single_color * ratio), 0, 255); } } }