
代码从超图工作空间读取到的面符号信息:

在转换到易智瑞的颜色空间时,使用了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;
}
下面是转换后的效果:

本文探讨了如何在将超图工作空间的面符号从RGB颜色空间转换到易智瑞颜色空间时,正确处理透明度问题。作者首先遇到RGBColorClass的局限,然后通过引入alpha blending概念解决了颜色显示不透明的问题。关键步骤包括调整代码以实现从RGB到带有透明度的转换。
1万+

被折叠的 条评论
为什么被折叠?



