代码从超图工作空间读取到的面符号信息:
在转换到易智瑞的颜色空间时,使用了RGBColorClass,虽然赋值了R、G、B以及Transparency,但是出来的面符号颜色仍然不对,可以从图上看出,RGB值都是对的,但是没有透明度选项。
// 颜色转换代码
public static IColor ConvertColorToIColor(Color sysColor )
{
RgbColor pColor = new RgbColor();
pColor.Red = sysColor.R;
pColor.Blue = sysColor.B;
pColor.Green = sysColor.G;
pColor.Transparency = sysColor.A;
return pColor;
}
后来查阅资料,了解了alpha blending 的含义,自己修改了代码,在代码中进行了转换。
c# - Converting ARBG to RGB with alpha blending - Stack Overflow
public static IColor ConvertColorToIColor(Color sysColor)
{
RgbColor pColor = new RgbColor();
double alpha = sysColor.A;
// 假设目标设备背景色是白色,从当前颜色向白色过度(255,255,255)
pColor.Red = Convert.ToInt32((alpha / 255) * sysColor.R + 255 - alpha) ;// Convert.ToInt32((alpha / 255) * sysColor.R + (1 - alpha / 255) * 255) ;
pColor.Blue = Convert.ToInt32((alpha / 255) * sysColor.B + 255 - alpha);
pColor.Green = Convert.ToInt32((alpha / 255) * sysColor.G + 255 - alpha);
return pColor;
}
下面是转换后的效果: