.NET Compact Framework 2.0中的Alpha混合颜色
时间:2020-03-05 18:40:21 来源:igfitidea点击:
在Full .NET框架中,可以使用Color.FromArgb()方法创建具有alpha混合的新颜色,如下所示:
Color blended = Color.FromArgb(alpha, color);
或者
Color blended = Color.FromArgb(alpha, red, green , blue);
但是,在Compact Framework(特别是2.0版)中,这些方法都不可用,我们只会得到:
Color.FromArgb(int red, int green, int blue);
和
Color.FromArgb(int val);
显然,第一个甚至不让我们输入Alpha值,但是后者的文档显示" val"是32位ARGB值(如0xAARRGGBB,而不是标准的24位0xRRGGBB),因此这很有意义我们可以只构建ARGB值并将其传递给函数。我尝试了以下方法:
private Color FromARGB(byte alpha, byte red, byte green, byte blue) { int val = (alpha << 24) | (red << 16) | (green << 8) | blue; return Color.FromArgb(val); }
但是无论我做什么,alpha混合都将无效,即使将alpha值设置为0时,所得的颜色也始终为完全不透明。
有人在紧凑框架上工作过吗?
解决方案
回答
显然,它不是那么简单,但是如果我们使用的是Windows Mobile 5.0或者更高版本,它仍然可能。
回答
Apparently, it's not quite that simple, but still possible, if you have Windows Mobile 5.0 or newer.
哇...如果我必须将所有代码都放入(并进行本机互操作!),绝对不值得!
很高兴知道,谢谢链接。
回答
那里有一个Codeplex站点,它似乎为我们带来了繁重的com互操作性:
回答
我接受此代码,然后添加此代码
device.RenderState.AlphaBlendEnable = true; device.RenderState.AlphaFunction = Compare.Greater; device.RenderState.AlphaTestEnable = true; device.RenderState.DestinationBlend = Blend.InvSourceAlpha; device.RenderState.SourceBlend = Blend.SourceAlpha; device.RenderState.DiffuseMaterialSource = ColorSource.Material;
在初始化的例程中,它工作得很好,谢谢