2008-08-18 83 views
2

在全.NET框架可以使用Color.FromArgb()方法来创建新的颜色与α混合,像这样:Alpha混合颜色在.NET Framework精简2.0

Color blended = Color.FromArgb(alpha, color); 

Color blended = Color.FromArgb(alpha, red, green , blue); 

但是在紧凑型框架(特别是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混合永远不会奏效,所产生的颜色总是以完全不透明,阿尔法值设置为0

即使有没有人得到这个在Compact Framework上工作?

回答

1

显然,这不是那么简单,但still possible,如果你的Windows Mobile 5.0或更高版本。

0

显然,这不是想象中的那么简单 ,但还是可以的,如果你有 的Windows Mobile 5.0或更高版本。

哇...绝对不值得,如果我必须把所有的代码(做本地互操作!) 好的,但要知道,感谢您的链接。

0

有一个codeplex site在那里,似乎做COM互操作的繁重的你:

0

我借这个代码,我在初始化程序添加此

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; 

,并很努力好,谢谢

0

CE 6.0不支持Alpha混合。 WM 5.0及以上版本,但不是通过.NET CF,你需要P/Invoke GDI才能做到这一点。现在有了现成的解决方案,但是,如果您有兴趣,我可以明天在办公室挖掘链接。我现在必须和CE 6.0一起工作,所以我没有想到他们。

如果您正在使用CE 6.0,你可以先预留一个透明背景颜色使用伪透明(例如FF00FF什么similiarly丑陋的),并使用该图像中的透明区域。然后,您的父级控件必须实现一个简单的界面,允许在女儿控件的图形缓冲区中重新绘制相关部分。请注意,这不会给你一个真正的“alpha通道”,而只是一个硬开关的二进制透明。

它并不像听起来那么糟糕。看看OpenNETCF ImageButton的初学者。如果你打算使用这种方法,我有一些简单的控制的扩展版本,如果你有兴趣,这种技术可以放在周围。

另一个缺点是,这种技术依赖于父控件实现一个特殊的接口,并且daugther控件在绘图中使用它。因此,对于闭源组件(即库存winforms组件),您运气不佳。

+1

CE 6.0 *确实*支持alpha混合。可能是您的特定操作系统版本不支持,但支持在操作系统中,并且可以包含在操作系统映像中。 – ctacke 2012-06-19 02:35:13