Однако я надеюсь, что есть специальные методы для преобразования как argb в строку, как string в argb. Что это за методы?
Вы бы так подумали, но, насколько мне известно, для этого, к сожалению, нет встроенного двустороннего преобразования.
Вот пара что вы можете сделать вместо этого:
Создайте свою собственную ConvertFrom-Color
функцию:
function ConvertFrom-Color
{
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[System.Drawing.Color[]]$InputColor
)
process {
foreach($color in $InputColor){
$color.R,$color.G,$color.B -join ', '
}
}
}
И используйте при необходимости:
PS C:\> $colorString = $Main.BackColor |ConvertFrom-Color
PS C:\> $colorString
0, 100, 200
Используйте [int]
Цвет ARGB
состоит из 4 1-байтовых каналов, которые идеально вписываются в 32-разрядное целое число. Если вам нужно передать отдельный цвет, используя один аргумент, это уже поддерживается:
PS C:\> $color = [System.Drawing.Color]'0,100,100'
PS C:\> $color.ToArgb()
-16751516
PS C:\> $argbValue = $color.ToArgb()
PS C:\> [System.Drawing.Color]::FromArgb($argbValue)
R : 0
G : 100
B : 100
A : 255
IsKnownColor : False
IsEmpty : False
IsNamedColor : False
IsSystemColor : False
Name : ff006464
Как и в случае с вашим начальным строковым представлением, стоит подчеркнуть, что преобразование из представления [int]
работает как с явным приведение и неявные преобразования при назначении типизированным свойствам:
$argbValue = -16751516
# This works just fine
[System.Drawing.Color]$argbValue
# As does this
[System.Windows.Forms.Form]@{ BackColor = $argbValue }
Поскольку вас интересует изменение поведения по умолчанию строковое представление System.Drawing.Color
, вы также можете переопределить реализацию метода ToString()
:
Update-TypeData -TypeName System.Drawing.Color -MemberType ScriptMethod -MemberName ToString -Value {
$this.psobject.Properties['R','G','B'].Value -join ', '
} -Force
Теперь все экземпляры [System.Drawing.Color]
будут использовать ваш собственный метод ToString()
при преобразовании в строку:
PS C:\> "$($Main.BackColor)"
0, 100, 200