Private/ConvertTo-ConsoleColor.ps1
|
function ConvertTo-ConsoleColor { <# .SYNOPSIS Maps an RGB color to the nearest System.ConsoleColor. .DESCRIPTION Finds the closest match among the 16 standard ConsoleColor values using Euclidean distance in RGB color space. Intended for ISE compatibility where ANSI True Color is not supported. .PARAMETER R Red component (0-255). .PARAMETER G Green component (0-255). .PARAMETER B Blue component (0-255). .EXAMPLE ConvertTo-ConsoleColor -R 255 -G 0 -B 0 Returns [System.ConsoleColor]::Red .EXAMPLE ConvertTo-ConsoleColor -R 128 -G 128 -B 128 Returns [System.ConsoleColor]::DarkGray .OUTPUTS System.ConsoleColor #> [CmdletBinding()] [OutputType([System.ConsoleColor])] param( [Parameter(Mandatory)] [int]$R, [Parameter(Mandatory)] [int]$G, [Parameter(Mandatory)] [int]$B ) $colorMap = @( @{ Color = [System.ConsoleColor]::Black; R = 0; G = 0; B = 0 } @{ Color = [System.ConsoleColor]::DarkBlue; R = 0; G = 0; B = 128 } @{ Color = [System.ConsoleColor]::DarkGreen; R = 0; G = 128; B = 0 } @{ Color = [System.ConsoleColor]::DarkCyan; R = 0; G = 128; B = 128 } @{ Color = [System.ConsoleColor]::DarkRed; R = 128; G = 0; B = 0 } @{ Color = [System.ConsoleColor]::DarkMagenta; R = 128; G = 0; B = 128 } @{ Color = [System.ConsoleColor]::DarkYellow; R = 128; G = 128; B = 0 } @{ Color = [System.ConsoleColor]::Gray; R = 192; G = 192; B = 192 } @{ Color = [System.ConsoleColor]::DarkGray; R = 128; G = 128; B = 128 } @{ Color = [System.ConsoleColor]::Blue; R = 0; G = 0; B = 255 } @{ Color = [System.ConsoleColor]::Green; R = 0; G = 255; B = 0 } @{ Color = [System.ConsoleColor]::Cyan; R = 0; G = 255; B = 255 } @{ Color = [System.ConsoleColor]::Red; R = 255; G = 0; B = 0 } @{ Color = [System.ConsoleColor]::Magenta; R = 255; G = 0; B = 255 } @{ Color = [System.ConsoleColor]::Yellow; R = 255; G = 255; B = 0 } @{ Color = [System.ConsoleColor]::White; R = 255; G = 255; B = 255 } ) $nearestColor = [System.ConsoleColor]::Black $minDistance = [int]::MaxValue foreach ($entry in $colorMap) { $dr = $R - $entry.R $dg = $G - $entry.G $db = $B - $entry.B $distance = ($dr * $dr) + ($dg * $dg) + ($db * $db) if ($distance -lt $minDistance) { $minDistance = $distance $nearestColor = $entry.Color } } return $nearestColor } |