.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;

在初始化的例程中,它工作得很好,谢谢