ColorScale: Add magma and inferno colormaps

This commit is contained in:
2026-01-30 11:28:46 +01:00
parent 0879983cca
commit 07fa788fe2
11 changed files with 63 additions and 26 deletions
+16 -9
View File
@@ -872,20 +872,27 @@ PlotType ConvertPlotType(const std::optional<std::string>& input) {
"Plot type not recognized");
}
ColorScaleEnum ConvertColorScale(const std::optional<std::string>& input) {
std::string color = input.value_or("indigo");
ColorScaleEnum ConvertColorScale(const std::optional<std::string> &input) {
std::string color = input.value_or("indigo");
if (color == "viridis")
return ColorScaleEnum::Viridis;
else if (color == "bw")
if (color == "bw")
return ColorScaleEnum::BW;
else if (color == "heat")
return ColorScaleEnum::Heat;
else if (color == "indigo")
if (color == "wb")
return ColorScaleEnum::WB;
if (color == "green")
return ColorScaleEnum::Green3;
if (color == "heat")
return ColorScaleEnum::Heat;
if (color == "indigo")
return ColorScaleEnum::Indigo;
else
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Color scale unknown");
if (color == "magma")
return ColorScaleEnum::Magma;
if (color == "inferno")
return ColorScaleEnum::Inferno;
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Color scale unknown");
}
IndexingSettings Convert(const org::openapitools::server::model::Indexing_settings &input) {
+5 -1
View File
@@ -221,14 +221,18 @@ components:
color_scale:
in: query
name: color
description: "Color scale for preview image: 0 - indigo, 1 - viridis, 2 - B/W, 3 - heat"
description: "Color scale for preview image"
schema:
type: string
enum:
- "indigo"
- "viridis"
- "bw"
- "wb"
- "green"
- "heat"
- "magma"
- "inferno"
default: "indigo"
schemas:
grid_scan:
File diff suppressed because one or more lines are too long
+4
View File
@@ -61,6 +61,10 @@ void ColorScale::CalcLUT() const {
case ColorScaleEnum::Green3:
map = &green_colormap;
break;
case ColorScaleEnum::Magma:
map = &magma_colormap; break;
case ColorScaleEnum::Inferno:
map = &inferno_colormap; break;
default:
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Color scale unknown");
+20 -8
View File
@@ -18,14 +18,16 @@ struct rgb {
float luminance(rgb input);
enum class ColorScaleEnum : int {
Viridis = 0,
Heat = 1,
Indigo = 2,
BW = 3,
WB = 4,
Green1 = 5,
Green2 = 6,
Green3 = 7
Indigo = 0,
Viridis = 1,
Magma = 2,
Inferno = 3,
Heat = 4,
BW = 5,
WB = 6,
Green1 = 7,
Green2 = 8,
Green3 = 9
};
enum class ColorScaleSpecial {
@@ -59,6 +61,16 @@ class ColorScale {
{0, 0, 0}, {0, 255, 0}
};
const std::vector<rgb> magma_colormap = {
{0, 0, 4}, {28, 16, 68}, {79, 18, 123}, {129, 37, 129},
{181, 54, 122}, {229, 80, 100}, {251, 135, 97}, {252, 191, 125}, {252, 253, 191}
};
const std::vector<rgb> inferno_colormap = {
{0, 0, 4}, {31, 12, 72}, {85, 15, 109}, {136, 34, 106},
{186, 54, 85}, {227, 89, 51}, {249, 140, 10}, {252, 195, 63}, {252, 255, 164}
};
ColorScaleEnum current = ColorScaleEnum::Indigo;
rgb gap = {.r = 190, .g = 190, .b = 190}; // Gray
+1 -1
View File
@@ -7,4 +7,4 @@ The project is supported by :
* ETH Domain via Open Research Data Contribute project (Jan - Dec 2023)
* AMD University Program with donation of licenses of Ethernet IP cores and Vivado software
This software uses Viridis colormap from Matplotlib under its BSD-compatible license
This software uses Viridis, Magma and Inferno colormaps from Matplotlib under its BSD-compatible license
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "jungfraujoch-frontend",
"version": "1.0.0-rc.122",
"version": "1.0.0-rc.123",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "jungfraujoch-frontend",
"version": "1.0.0-rc.122",
"version": "1.0.0-rc.123",
"license": "GPL-3.0",
"dependencies": {
"@emotion/react": "^11.10.4",
+4
View File
@@ -405,7 +405,11 @@ class PreviewImage extends Component<MyProps, MyState> {
<MenuItem value={color_scale.INDIGO}>Indigo/white</MenuItem>
<MenuItem value={color_scale.HEAT}>Heat</MenuItem>
<MenuItem value={color_scale.VIRIDIS}>Viridis</MenuItem>
<MenuItem value={color_scale.MAGMA}>Magma</MenuItem>
<MenuItem value={color_scale.INFERNO}>Inferno</MenuItem>
<MenuItem value={color_scale.BW}>Black/white</MenuItem>
<MenuItem value={color_scale.WB}>White/black</MenuItem>
<MenuItem value={color_scale.GREEN}>Green</MenuItem>
</Select>
</FormControl>
<Stack spacing={3} direction="row" sx={{width:"83%"}}>
@@ -10,5 +10,9 @@ export enum color_scale {
INDIGO = 'indigo',
VIRIDIS = 'viridis',
BW = 'bw',
WB = 'wb',
GREEN = 'green',
HEAT = 'heat',
MAGMA = 'magma',
INFERNO = 'inferno',
}
@@ -1122,7 +1122,7 @@ export class DefaultService {
saturation?: number,
jpegQuality: number = 100,
showResRing: number = 0.1,
color: 'indigo' | 'viridis' | 'bw' | 'heat' = 'indigo',
color: 'indigo' | 'viridis' | 'bw' | 'wb' | 'green' | 'heat' | 'magma' | 'inferno' = 'indigo',
showResEst: boolean = false,
): CancelablePromise<Blob> {
return __request(OpenAPI, {
@@ -22,9 +22,11 @@ JFJochViewerToolbarDisplay::JFJochViewerToolbarDisplay(QWidget *parent)
// Initialize QComboBox with the options
color_map_select = new QComboBox(this);
color_map_select->addItem("Viridis", static_cast<int>(ColorScaleEnum::Viridis));
color_map_select->addItem("Heat", static_cast<int>(ColorScaleEnum::Heat));
color_map_select->addItem("Indigo", static_cast<int>(ColorScaleEnum::Indigo));
color_map_select->addItem("Viridis", static_cast<int>(ColorScaleEnum::Viridis));
color_map_select->addItem("Magma", static_cast<int>(ColorScaleEnum::Magma));
color_map_select->addItem("Inferno", static_cast<int>(ColorScaleEnum::Inferno));
color_map_select->addItem("Heat", static_cast<int>(ColorScaleEnum::Heat));
color_map_select->addItem("Black on white", static_cast<int>(ColorScaleEnum::BW));
color_map_select->addItem("White on black", static_cast<int>(ColorScaleEnum::WB));
color_map_select->addItem("Green (gamma)", static_cast<int>(ColorScaleEnum::Green1));