#!/bin/bash # (C) 2018-2020 Felix Hauri - felix@f-hauri.ch # Licensed under terms of GPL v3. www.gnu.org # Color browser using hsv<->rgb functions SRCDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" if [ -e $SRCDIR/hsvrgb.sh ] ;then . $SRCDIR/hsvrgb.sh else echo >&2 "Functions file 'hsvrgb.sh' not found."; exit 1 fi hueDemos=${1:-10} satDemos=${2:-6} valuesDemos=${3:-3} mixedDemo=${4:-true} if $mixedDemo ;then ansiBunch=(ansiRGBdemo\ ansi1Bdemo) else ansiBunch=(ansiRGBdemo ansi1Bdemo) fi ansiRGBdemo() { printf '\e[0;48;2;%s;%s;%sm %02X%02X%02X \e[0m' "$@" "$@" } ansi1Bdemo() { local -i r=$(( $1/42>5?5:$1/42 )) g=$(( $2/42>5?5:$2/42 )) \ b=$(( $3/42>5?5:$3/42 )) printf '\e[48;5;%dm %03d \e[0m' $(( 16 + r*36+ $g *6+ $b )){,} } for bunchDemo in "${ansiBunch[@]}" ;do read -ra bunchDemo <<<"$bunchDemo" for ((v=-1;v<255;v+=(255/valuesDemos)));do ((v>(255-255/valuesDemos))) && v=255 ((v>0)) &&for ((s=0; s<=100000; s+=100000/(satDemos-1) ));do ((s>(100000-100000/(satDemos-1)))) && s=100000 ds=0000$s printf -v ds %.5f ${ds::-5}.${ds: -5} for ansiDemo in "${bunchDemo[@]}";do for ((t=0;t<=(360-360/hueDemos); t+=360/hueDemos));do rgb $t $ds $v out $ansiDemo "${out[@]}" done echo done done done done printf -v AFmt '%*s' 80 '' AFmt=${AFmt// /'\e[48;5;%d;38;5;%dm\U2590'} AFmt+='\e[0m\n' printf -v CFmt '%*s' 80 '' CFmt=${CFmt// /'\e[48;2;%d;%d;%d;38;2;%d;%d;%dm\U2590'} CFmt+='\e[0m\n' declare -ia cline=() aline=() rcols declare -i i ansi for s in 1 .{90..00..10};do for i in {0..159};do rgb $((i*224375/100000)) $s 255 rcols aline+=("16+${rcols[0]}*5/255*36+5*${rcols[1]}/255*6+5*${rcols[2]}/255") cline+=(${rcols[@]}) done done printf "$AFmt" ${aline[@]} printf "$CFmt" ${cline[@]} cline=() aline=() for v in {255..25..25};do for i in {0..159};do rgb $((i*224375/100000)) 1 $v rcols aline+=("16+${rcols[0]}*5/255*36+5*${rcols[1]}/255*6+5*${rcols[2]}/255") cline+=(${rcols[@]}) done done printf "$AFmt" ${aline[@]} printf "$CFmt" ${cline[@]}