views:

1504

answers:

4

In the Full .NET framework you can use the Color.FromArgb() method to create a new color with alpha blending, like this:

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

or

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

However in the Compact Framework (2.0 specifically), neither of those prototypes are valid, you only get:

Color.FromArgb(int red, int green, int blue);

and

Color.FromArgb(int val);

The first one, obviously, doesn't even let you enter an alpha value, but the documentation for the latter shows that "val" is a 32bit ARGB value (as 0xAARRGGBB as opposed to the standard 24bit 0xRRGGBB), so it would make sense that you could just build the ARGB value and pass it to the function. I tried this with the following:

private Color FromARGB(byte alpha, byte red, byte green, byte blue)
{
    int val = (alpha << 24) | (red << 16) | (green << 8) | blue;
    return Color.FromArgb(val);
}

But no matter what I do, the alpha blending never works, the resulting color always as full opacity, even when setting the alpha value to 0.

Has anyone gotten this to work on Compact Framework?

A: 

Apparently, it's not quite that simple, but still possible, if you have Windows Mobile 5.0 or newer.

Sören Kuklau
A: 

Apparently, it's not quite that simple, but still possible, if you have Windows Mobile 5.0 or newer.

Wow...definitely not worth it if I have to put all that code in (and do native interop!) Good to know though, thanks for the link.

Adam Haile
A: 

There is a codeplex site out there that seems to do the heavy lifting of com interop for you:

Peter Walke
A: 

hi, i take this code and i add this

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;

in the initialized routine and it work very well, thank you

fede