由于net平台的普及问题 为了尽可能的增加用户使用量 很多应用基于2.0写的 所以不考虑wpf
众所周知 winform 的textBox的颜色不能使用 带有 Alpha 属性的颜色 即半透明效果 度娘 谷哥 很久后也无法解决了该问题
忽然想到了下面的方法:
半透明的颜色 最终画在画布上叠加后 也是1个rgb颜色 取出来 就是我们要的颜色
有人要问了 既然只适用于纯色 那半透明的效果还有什么意义呢?
答:有的 在制作皮肤的过程中 比如在父标签背景变更的情况下 要让textBox 背景更改为 父标签的 Alpha = 30 ,这种方法就很适用
看效果:
上代码(调用这个静态函数返回的颜色赋值给textBox就可以):
VB.NET
''' <summary> ''' 将有半透明效果的颜色转成没有半透明的颜色 ''' </summary> ''' <param name="backcolor">背景色,一般为白色 Color.White</param> ''' <param name="alphacolor">带alpha的颜色</param> ''' <returns></returns> ''' <remarks></remarks> Protected Friend Shared Function Alpha2Color(backcolor As Color,alphacolor As Color) As Color Using bmp As New Bitmap(1,1) Using g As Graphics = Graphics.FromImage(bmp) g.Clear(backcolor) Using br As New SolidBrush(alphacolor) g.FillRectangle(br,New Rectangle(0,1,1)) End Using End Using Return bmp.GetPixel(0,0) End Using End Function
C#
/// <summary> /// 将有半透明效果的颜色转成没有半透明的颜色 /// </summary> /// <param name="backcolor">背景色,一般为白色 Color.White</param> /// <param name="alphacolor">带alpha的颜色</param> /// <returns></returns> /// <remarks></remarks> protected static internal Color Alpha2Color(Color backcolor,Color alphacolor) { using (Bitmap bmp = new Bitmap(1,1)) { using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(backcolor); using (SolidBrush br = new SolidBrush(alphacolor)) { g.FillRectangle(br,new Rectangle(0,1)); } } return bmp.GetPixel(0,0); } }