System.Drawing.Color 是 .NET Framework 內建結構,**非使用者定義類型**。VB.NET(與 C# 同)禁止對現有類型進行運算子多載,只能對自訂類別/結構多載。
Imports System.Runtime.CompilerServices
Imports System.Drawing
Public Module ColorExtensions
Public Function Subtract(c1 As Color, c2 As Color) As Integer
' 範例:回傳 ARGB 整數差值(僅示意,實際業務需定義語意)
Return c1.ToArgb() - c2.ToArgb()
End Function
' 若需逐通道運算,回傳新 Color
Public Function SubtractChannels(c1 As Color, c2 As Color) As Color
Return Color.FromArgb(
Math.Abs(c1.A - c2.A),
Math.Abs(c1.R - c2.R),
Math.Abs(c1.G - c2.G),
Math.Abs(c1.B - c2.B)
)
End Function
End Module
' 使用方式
Dim diff As Integer = Color.White.Subtract(Color.Yellow)
Dim newColor = Color.White.SubtractChannels(Color.Yellow)
Color.ToArgb() 回傳 32 位有號整數(ARGB 打包),直接相減無色彩意義,可能溢位、產生負數。ColorMatrix、ImageAttributes 或第三方庫(如 ColorMine、SkiaSharp)。Color 多載 Operator -。Subtract 實現語法糖效果。