Alpha míchat barvy v .NET Compact Framework 2.0

hlasů
2

V úplném .NET můžete použít metodu Color.FromArgb () vytvořit novou barvu alpha míchat, například takto:

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

nebo

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

Nicméně v Compact Framework (2,0 specificky), ani jedna z těchto metod jsou k dispozici, pouze máte:

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

a

Color.FromArgb(int val);

První z nich, samozřejmě, ani vám umožní zadat hodnotu alfa, ale dokumentace posledních ukazuje, že „val“ je hodnota 32bit ARGB (jako 0xAARRGGBB na rozdíl od standardní 24bit 0xRRGGBB), tak to by dávalo smysl že byste mohli jen stavět hodnotu ARGB a předat jej do funkce. Zkoušel jsem to s následující:

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

Ale bez ohledu na to, co dělám, alfa blending nikdy nefunguje, výsledná barva vždy jako úplné neprůhlednosti, a to i při nastavení hodnoty alfa 0.

Má někdo dostat, aby to fungovalo v rámci Compact?

Položena 18/08/2008 v 13:17
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
1

Zdá se, že to není tak jednoduché, ale přesto je to možné , pokud máte Windows Mobile 5.0 nebo novější.

Odpovězeno 18/08/2008 v 13:33
zdroj uživatelem

hlasů
0

CE 6.0 nepodporuje prolnutí alfa. WM 5.0 a výše uvedený postup, ale ne přes .NET CF, budete muset P / Invoke GDI věci, aby tak učinily. K dispozici jsou ready-made řešení, tam venku, ale pokud máte zájem mohu kopat odkazy zítra v kanceláři. Musím pracovat s CE 6.0 aktuálně takže nemám mít na mysli.

Pokud používáte CE 6.0 můžete použít pseudo-průhlednost vyhrazením barvu průhlednosti pozadí (např FF00FF nebo něco similiarly ošklivý) a za použití, které ve svých obrázků pro průhledné oblasti. Pak se vaše mateřská kontroly musí provádět jednoduché rozhraní, které umožňuje opětovné čerpání relevantní část na vaši dceru Controls grafické paměti. Všimněte si, že to nebude vám věrný „alfa kanál“, ale spíše jen těžko on-off binární druh transparentnosti.

Není to tak zlé, jak to zní. Podívejte se na OpenNETCF ImageButton pro začátečníky. Pokud se chystáte použít tuto metodu, mám poněkud rozšířené verzi několika jednoduchých ovládacích prvků s touto technikou, ležící kolem, pokud máte zájem.

Jeden další nevýhodou je, že tato metoda je založena na kontrole mateřské provádí speciální rozhraní a daugther řídí jeho použití v kreslení. Takže s closed-source komponent (tedy i zásoby WinForms komponenty) jste smůlu.

Odpovězeno 18/06/2012 v 23:03
zdroj uživatelem

hlasů
0

i tento kód a přidat i toto

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;

V inicializační rutině a to funguje velmi dobře, děkuji

Odpovězeno 20/05/2010 v 01:36
zdroj uživatelem

hlasů
0

Tam je CodePlex stránky tam, že se zdá, dělat těžkou práci s COM interop pro vás:

Odpovězeno 14/10/2008 v 00:03
zdroj uživatelem

hlasů
0

Zdá se, že to není tak jednoduché, ale přesto je to možné, pokud máte Windows Mobile 5.0 nebo novější.

Wow ... rozhodně nestojí za to, jestli mám dát všechen ten kód (a dělat nativní interop!) Co je dobré vědět i když, díky za odkaz.

Odpovězeno 18/08/2008 v 13:37
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more