Bonjour,
J'effectue des manipulations sur des couleurs dans un format non standard. ABGR au lieu de ARGB.
Mes couleurs sont stockées sous la forme d'un numeric en base de donnée et je les récupères sans problème dans un uint (au debug la valeur affichée est bonne)
Pour retransformer mon uint en 3 couleurs plus alpha j'ai une méthode qui fonctionne en C++ mais qui a un comportement différent en C#:
en C++ : couleur noir :après passage dans ce code,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // fabrication du noir à partir des valeurs décimales : unsigned int a = 255; unsigned int b = 0; unsigned int g = 0; unsigned int r = 0; unsigned int cl = ((a&0xff) << 24) | ((b&0xff) << 16) | ((g&0xff) << 8) | (r&0xff); //-> cl = 4278190080 // décomposition du noir en 4 valeurs décimales : a = cl >> 24; b = (cl - (a << 24)) >> 16; g = (cl - (a << 24) - (b << 16)) >> 8; r = (cl - (a << 24) - (b << 16) - (g << 8));
a vaut 255 (alpha opaque 100%)
b, g et r valent tous 0 (couleur noir)
le même code en C#me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 uint cl = Convert.ToUInt32(param); // cl vaut bien 4278190080, donc noir opaque uint a = cl >> 24; uint b = (cl - (a << 24)) >> 16; uint g = (cl - (a << 24) - (b << 16)) >> 8; uint r = (cl - (a << 24) - (b << 16) - (g << 8));
a : 254
b : 255
g : 255
r : 196
D'où ma question : Y a-t-il un comportement différent des opérateurs binaires entre C# et C++ ?
J'ajoute que si je prends une couleur très proche du noir
blue : 1 & green : 1 & red : 1 & alpha : 255, il n'y a aucun problème en C# ...
Les autres couleurs que j'ai testées ne posent à priori pas de problème![]()
Partager