💙

PowerShellでRGBを色相に変換する。

2022/08/11に公開

この記事は何?

  • RGB を色相に変換したいです。
  • PowerShell で片づけましょう。

構成

OS, PowerShell, .NET Framework のバージョンは次の通りです。

PS > (Get-WmiObject -Class Win32_OperatingSystem).Caption
Microsoft Windows 11 Home

PS > [string]$PSVersionTable.PSVersion
5.1.22000.653

PS > $Release = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release
PS > if ($Release -ge 528040) { ".NET Framework 4.8, Release: $Release" }
.NET Framework 4.8, Release: 528449

コード

.NET Framework の Color 構造体を使うのが楽です。

# PowerShell のセッションに .NET クラスを定義する。
$SearchPath = 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Drawing'
$SearchFilter = 'System.Drawing.dll'
$PathToAssembly = Get-ChildItem -LiteralPath $SearchPath -Filter $SearchFilter -Recurse |
    Select-Object -ExpandProperty FullName -Last 1
Add-Type -LiteralPath $PathToAssembly

# 色相を得る。
$Red1, $Green1, $Blue1 = 255, 0, 0
$Color1 = [System.Drawing.Color]::FromArgb($Red1, $Green1, $Blue1)
$Color1.GetHue()

$Red2, $Green2, $Blue2 = 0, 255, 0
$Color2 = [System.Drawing.Color]::FromArgb($Red2, $Green2, $Blue2)
$Color2.GetHue()

$Red3, $Green3, $Blue3 = 0, 0, 255
$Color3 = [System.Drawing.Color]::FromArgb($Red3, $Green3, $Blue3)
$Color3.GetHue()

こんな感じになりました。

PS > $Red1, $Green1, $Blue1 = 255, 0, 0
PS > $Color1 = [System.Drawing.Color]::FromArgb($Red1, $Green1, $Blue1)
PS > $Color1.GetHue()
0
PS > $Red2, $Green2, $Blue2 = 0, 255, 0
PS > $Color2 = [System.Drawing.Color]::FromArgb($Red2, $Green2, $Blue2)
PS > $Color2.GetHue()
120
PS > $Red3, $Green3, $Blue3 = 0, 0, 255
PS > $Color3 = [System.Drawing.Color]::FromArgb($Red3, $Green3, $Blue3)
PS > $Color3.GetHue()
240

簡単ですね!

まとめ

  • RGB を色相(Hue)に変換できました。
  • もうちょっといろいろ遊べそうですね!

現場からは以上です。

参考資料

Discussion