2008-08-18 10 views
2

Dans le .NET framework complet, vous pouvez utiliser la méthode Color.FromArgb() pour créer une nouvelle couleur avec mélange alpha, comme ceci:mélange de couleurs Alpha dans .NET Compact Framework 2.0

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

ou

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

Toutefois, dans le Compact Framework (2.0 spécifiquement), aucune de ces méthodes sont disponibles, vous obtenez seulement:

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

et

Color.FromArgb(int val); 

La première, évidemment, ne même pas vous laisser entrer une valeur alpha, mais la documentation de celle-ci montre que « val » est une valeur ARVB 32bit (comme 0xAARRVVBB par opposition à la norme 24bit 0xRRGGBB), il serait donc logique que vous puissiez simplement construire la valeur ARGB et la transmettre à la fonction. J'ai essayé 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, les travaux de mélange alpha jamais, la couleur résultante toujours aussi pleine d'opacité, même lorsque le réglage de la valeur alpha à 0.

Quelqu'un at-il avez-vous eu l'occasion de travailler sur le Compact Framework?

Répondre

1

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

0

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

Wow ... certainement pas la peine si je dois mettre tout ce code (et faire Interop native!) Bon à savoir si, merci pour le lien.

0

Il y a un codeplex site là-bas qui semble faire le levage de charges lourdes de com interop pour vous:

0

je prends ce code et j'ajoute ceci dans la routine initialisées

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; 

et il travaille très bien, merci

0

CE 6.0 ne supporte pas le mélange alpha. WM 5.0 et au-dessus le font, mais pas à travers le .NET CF, vous aurez besoin de P/Invoke GDI pour le faire. Il existe des solutions prêtes à l'emploi, cependant, si vous êtes intéressé, je peux creuser les liens demain au bureau. Je dois travailler avec CE 6.0 actuellement, 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 d'arrière-plan de transparence (par exemple, ff00ff ou quelque chose de très moche) et en l'utilisant 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 fille. Notez que cela ne vous donnera pas un vrai "canal alpha" mais plutôt une sorte de transparence binaire.

Ce n'est pas aussi mauvais que cela puisse paraître. Jetez un coup d'œil à l'ImageButton OpenNETCF pour les débutants.Si vous allez utiliser cette méthode, j'ai une version assez é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 fait que le contrôle parent implémente une interface spéciale et que la fille l'utilise pour dessiner. Donc, avec des composants à source fermée (c'est-à-dire aussi les composants de stock winforms), vous n'avez pas de chance.

+1

CE 6.0 * supporte * le mélange alpha. Il se peut que votre système d'exploitation spécifique ne le soit pas, mais le support se trouve dans le système d'exploitation et peut être inclus dans une image de système d'exploitation. – ctacke

Questions connexes