💙
PowerShellでRGBを色相に変換する。
この記事は何?
- 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