当前位置: 首页 > 编程语言 > C#

使用AlphaBlending将ARBG转换为RGB分享

时间:2023-04-10 19:00:13 C#

ConvertARBGtoRGBwithAlphaBlending假设我们有ARGB颜色:Colorargb=Color.FromARGB(127,69,12,255);//浅紫色。当它在现有颜色之上绘制时,该颜色将混合。所以当它与白色混合时,生成的颜色是Color.FromARGB(255,162,133,255);解决方案应该是这样的:Colorblend=Color.White;颜色argb=Color.FromARGB(127,69,12,255);//浅紫色。颜色rgb=ToRGB(argb,blend);//同Color.FromARGB(255,162,133,255);ToRGB的实现是怎样的?这称为阿尔法混合。在伪代码中,假设背景颜色(混合)的alpha始终为255。还假设alpha为0-255。alpha=argb.alpha()r=(alpha/255)*argb.r()+(1-alpha/255)*blend.r()g=(alpha/255)*argb.g()+(1-alpha/255)*blend.g()b=(alpha/255)*argb.b()+(1-alpha/255)*blend.b()注意:根据语言,您可能需要很少(更多)关心点/整数数学和舍入问题。所以铸造中间编辑添加:如果你没有alpha为255的背景颜色,代数会变得更复杂。我以前做过这个,这是留给读者的一个有趣的练习(如果你真的需要知道,再问一个问题:)。换句话说,C将与混合A相同的颜色混合到某些背景中,然后再混合B。这有点像计算A+B(与B+A相反)。我知道这是一个旧线程程序,但我想添加这个:公共共享函数AlphaBlend(ByValForeGroundAsColor,ByValBackGroundAsColor)AsColorIfForeGround.A=0ThenReturnBackGroundIfBackGround.A=0ThenReturnForeGroundIfForeGround.A=255然后返回ForeGroundDimAlphaAsInteger=CInt(ForeGround.A)+1DimBAsInteger=Alpha*ForeGround.B+(255-Alpha)*BackGround.B>>8DimGAsInteger=Alpha*ForeGround.G+(255-Alpha)*BackGround.G>>8DimRAsInteger=Alpha*ForeGround.R+(255-Alpha)*BackGround.R>>8DimAAsInteger=ForeGround.A如果背景.A=255则A=255如果A>255则A=255如果R>255则R=255如果G>255则G=255如果B>255则B=255返回Color.FromArgb(Math.Abs??(A),Math.Abs??(R),Math.Abs??(G),Math.Abs??(B))EndFunctionpublicstaticColorAlphaBlend(ColorForeGround,ColorBackGround){if(ForeGround.A==0)returnBackGround;如果(BackGround.A==0)返回前景;如果(ForeGround.A==255)返回前景;intAlpha=Convert.ToInt32(ForeGround.A)+1;intB=Alpha*ForeGround.B+(255-Alpha)*BackGround.B>>8;intG=Alpha*ForeGround.G+(255-Alpha)*BackGround.G>>8;intR=Alpha*ForeGround.R+(255-Alpha)*BackGround.R>>8;intA=ForeGround.A;如果(BackGround.A==255)A=255;如果(A>255)A=255;如果(R>255)R=255;如果(G>255)G=255;如果(B>255)B=255;返回Color.FromArgb(Math.Abs??(A),Math.Abs??(R),Math.Abs??(G),Math.Abs??(B));如果你不需要了解这个预渲染,相信你总能在密苏里州中部的iPhone上使用getpixel的win32方法输入,无法访问。将寻找一个真正的win32示例,看看是否有一个.net等效项。如果有人关心,并且不想使用上面发布的(优秀)答案,您可以点击此链接获取.NetMSDNExample中像素的颜色值以上是C#学习教程:将ARBG转换为RGBwithAlphaBlending就是全部分享,如果对大家有用需要了解更多C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: