如何获取与皮肤的BackColor 关联的ForeColor?

How to get the ForeColor associated with the BackColor of the skin?

当您将 SimpleButton.Appearance.BackColor 属性 设置为 DX Skin 颜色时(@Danger@Question@Success@Primary@Info,如图所示):

SimpleButton.Appearance.ForeColor 属性 在 运行 时使用适当的颜色进行评估(如果肤色太深,将使用 Color.White;如果肤色太亮,用Color.Black):

@Success:

浅色 @Success:

如何获得在 运行 时间内评估的 ForeColor

我试过获得 SimpleButton.ForeColorSimpleButton.Appearance.ForeColorSimpleButton.Appearance.GetForeColor(e.GraphicsCache)(我试图在 CustomDraw 事件中获得这种颜色)但它总是 Color.Black

DevExpress.LookAndFeel.DXSkinColors.ForeColors.Information 属性 应该为 Information/Success 着色提供 ForeColor。

根据this implementation of the W3C standard, making some modifications per Miral的测试,我最终得到了这个扩展方法:

public static Color GetContrastColor(this Color color)
{
    return (color.R * 0.299M) + (color.G * 0.587M) + (color.B * 0.114M) > 149 ? 
        Color.Black : 
        Color.White;
}