use chroma.js to calculate waterfall colors

This commit is contained in:
Jakob Ketterl
2020-09-17 20:10:01 +02:00
parent e10a52b39e
commit fa08f1e2cf
3 changed files with 14 additions and 19 deletions

View File

@ -700,7 +700,7 @@ function on_ws_recv(evt) {
switch (json.type) {
case "config":
var config = json['value'];
waterfall_colors = config['waterfall_colors'];
waterfall_colors = chroma.scale(config['waterfall_colors']);
waterfall_min_level_default = config['waterfall_min_level'];
waterfall_max_level_default = config['waterfall_max_level'];
waterfall_auto_level_margin = config['waterfall_auto_level_margin'];
@ -1207,16 +1207,9 @@ function open_websocket() {
}
function waterfall_mkcolor(db_value, waterfall_colors_arg) {
if (typeof waterfall_colors_arg === 'undefined') waterfall_colors_arg = waterfall_colors;
if (db_value < waterfall_min_level) db_value = waterfall_min_level;
if (db_value > waterfall_max_level) db_value = waterfall_max_level;
var full_scale = waterfall_max_level - waterfall_min_level;
var relative_value = db_value - waterfall_min_level;
var value_percent = relative_value / full_scale;
var percent_for_one_color = 1 / (waterfall_colors_arg.length - 1);
var index = Math.floor(value_percent / percent_for_one_color);
var remain = (value_percent - percent_for_one_color * index) / percent_for_one_color;
return color_between(waterfall_colors_arg[index + 1], waterfall_colors_arg[index], remain);
waterfall_colors_arg = waterfall_colors_arg || waterfall_colors;
var value_percent = (db_value - waterfall_min_level) / (waterfall_max_level - waterfall_min_level);
return waterfall_colors(Math.max(0, Math.min(1, value_percent)));
}
function color_between(first, second, percent) {
@ -1311,9 +1304,9 @@ function waterfall_add(data) {
//Add line to waterfall image
var oneline_image = canvas_context.createImageData(w, 1);
for (var x = 0; x < w; x++) {
var color = waterfall_mkcolor(data[x]);
for (i = 0; i < 4; i++)
oneline_image.data[x * 4 + i] = ((color >>> 0) >> ((3 - i) * 8)) & 0xff;
var color = waterfall_mkcolor(data[x]).rgb();
for (i = 0; i < 3; i++) oneline_image.data[x * 4 + i] = color[i];
oneline_image.data[x * 4 + 3] = 255;
}
//Draw image
@ -1619,8 +1612,9 @@ function secondary_demod_waterfall_add(data) {
//Add line to waterfall image
var oneline_image = secondary_demod_current_canvas_context.createImageData(w, 1);
for (var x = 0; x < w; x++) {
var color = waterfall_mkcolor(data[x] + secondary_demod_fft_offset_db);
for (var i = 0; i < 4; i++) oneline_image.data[x * 4 + i] = ((color >>> 0) >> ((3 - i) * 8)) & 0xff;
var color = waterfall_mkcolor(data[x] + secondary_demod_fft_offset_db).rgb();
for (var i = 0; i < 3; i++) oneline_image.data[x * 4 + i] = color[i];
oneline_image.data[x * 4 + 3] = 255;
}
//Draw image