Question

Dans le framework Full .NET, vous pouvez utiliser la méthode Color.FromArgb() pour créer une nouvelle couleur avec fusion alpha, comme ceci :

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

ou

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

Cependant, dans le Compact Framework (2.0 en particulier), aucune de ces méthodes n'est disponible, vous obtenez uniquement :

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

et

Color.FromArgb(int val);

Le premier, évidemment, ne vous permet même pas d'entrer une valeur alpha, mais la documentation de ce dernier montre que "val" est une valeur ARGB de 32 bits (comme 0xAARRGGBB par opposition au 0xRRGGBB standard de 24 bits), donc cela aurait du sens que vous pouvez simplement créer la valeur ARGB et la transmettre à la fonction.J'ai essayé ceci avec ce qui suit :

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

Mais peu importe ce que je fais, le mélange alpha ne fonctionne jamais, la couleur résultante étant toujours d'une opacité totale, même en réglant la valeur alpha sur 0.

Quelqu'un a-t-il fait fonctionner cela sur le Compact Framework ?

Était-ce utile?

La solution

Apparemment, ce n'est pas si simple, mais encore possible, si vous disposez de Windows Mobile 5.0 ou version ultérieure.

Autres conseils

Apparemment, ce n'est pas aussi simple, mais toujours possible, si vous avez Windows Mobile 5.0 ou plus récent.

Wow ... ne vaut certainement pas la peine si je dois mettre tout ce code (et faire l'interopt natif!) Bien à savoir, merci pour le lien.

Il y a un site codeplex là-bas, cela semble faire le gros du travail de com interop pour vous :

je prends ce code et j'ajoute ceci

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;

dans la routine initialisée et ça marche très bien, merci

CE 6.0 ne prend pas en charge le mélange alpha.WM 5.0 et supérieur le font, mais pas via .NET CF, vous devrez P/Invoke GDI pour le faire.Il existe des solutions toutes faites, cependant, si vous êtes intéressé, je peux trouver les liens demain au bureau.Je dois actuellement travailler avec CE 6.0, donc je ne les ai pas en tête.

Si vous utilisez CE 6.0 vous pouvez utiliser la pseudo-transparence en réservant une couleur de fond de transparence (par ex.ff00ff ou quelque chose de similaire) et utilisez-le dans vos images pour les zones transparentes.Ensuite, vos contrôles parents doivent implémenter une interface simple qui permet de redessiner la partie pertinente sur le tampon graphique de vos contrôles filles.Notez que cela ne vous donnera pas un véritable "canal alpha", mais plutôt juste une sorte de transparence binaire on-off.

Ce n'est pas aussi grave qu'il y paraît.Jetez un œil à OpenNETCF ImageButton pour commencer.Si vous envisagez d'utiliser cette méthode, j'ai une version quelque peu étendue de quelques contrôles simples avec cette technique qui traîne si vous êtes intéressé.

Un inconvénient supplémentaire est que cette technique repose sur le contrôle parent implémentant une interface spéciale et sur les contrôles filles qui l'utilisent dans le dessin.Donc avec les composants de source fermée (c'est-à-direégalement les composants Winforms d'origine), vous n'avez pas de chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top