vxn772
Messages postés29Date d'inscriptionjeudi 8 février 2007StatutMembreDernière intervention 3 mars 2009
-
22 mai 2008 à 17:36
vxn772
Messages postés29Date d'inscriptionjeudi 8 février 2007StatutMembreDernière intervention 3 mars 2009
-
23 mai 2008 à 16:46
Bonjour tout le monde !
J'ai un problème très bizarre, que je ne comprend absolument pas.
Je suis en train de travailler sur un OCX, déssiné avec du GDI.
À un moment, j'ai besoin de convertir des couleurs type RGB en type Long.
C'est pas de problème pour la formule, mais quand j'essaye d'executer l'appli, il m'affiche "Dépassement de capacité", alors que
le résultat est inférieur à 10.000.000 et qu'il est donné dans une variable de type double !
Je comprend pas le problème, mais je suis sur que vous pourrez m'aider !
Merci d'avance !
VB6 C'est++ mieux !
P.S.: Dans ce cas précis, le calcul à faire est : var = 255 * 255 * 151 + 255 * 151 + 151 (= 9857431)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 mai 2008 à 19:38
Ton problème vient de Col.B * 255 * 255 et de Col.G * 255
Prennons Col.G, c'est une variable de type Byte, donc pouvant varier de -128 à +128
Avant toute conversion ultérieure, le résultat de cette sous opération sera du même type que le premier opérande donc ici de Col.G soit Byte.
Imaginons que Col.G soit égal à 1, le résultat sera égal à 255. Ca ne rentre pas dans un byte.
L'astuce consiste à fixer dès le départ le type à Long en convertissant ta variable en Long.
Donc avec une formule comme ceci, ça devrait je pense mieux marcher :
vxn772
Messages postés29Date d'inscriptionjeudi 8 février 2007StatutMembreDernière intervention 3 mars 2009 22 mai 2008 à 19:30
Déjà merci pour avoir répondu aussi vite !
Je te passe le code :
Ma fonction :
Private Function RGBToLong(Col As RGB_COLOR_INT) As Long
RGBToLong = Col.B * 255 * 255 + Col.G * 255 + Col.R
End Function
La déclaration de type :
Private type RGB_COLOR_INT
B as byte
G as byte
R as byte
End type
L'appel de la fonction :
Dim Col1 as RGB_COLOR_INT
Dim ColLng as double
Col1.B = 151 (enfin c'est plus compliqué ici, mais en gros, c'est la valeure que je veux pour l'instant)
Col1.G = 151
Col1.R = 151
ColLng = CDbl(RGBToLong(Col1))
vxn772
Messages postés29Date d'inscriptionjeudi 8 février 2007StatutMembreDernière intervention 3 mars 2009 22 mai 2008 à 20:38
Ça marche ! Merci beaucoup ! C'était effectivement le bug.
J'avais trouvé une manière de contourner en utilisant LSet, mais elle est plus compliquée.
VB6 C'est++ mieux !
Vous n’avez pas trouvé la réponse que vous recherchez ?
[javascript:alink_4.Click() variables de type Byte] sont stockées sous
la forme d'un nombre de 8 bits (1 octet unique), non signé, compris entre 0 et
255.
Le
<object id="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_5.Click() type de données]Byte est utile pour
le stockage de données binaires.