Erreur avec RGBA

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Erreur avec RGBA

Message par Shadow »

Salut, quand je fais RGBA(255, 255, 255, 255) ça me retourne -1 soit 18446744073709551615 avec StrU
Alors que le résulta devrais être 4228250625 (255 ^ 4)

Code : Tout sélectionner

Debug StrU(RGBA(255, 255, 255, 255))
Je suis en 5.44 LTS x64.

Et même avec La dernière version de PB ça le fais alors ou est l’erreur ?
RGB elle fonctionne très bien mais pas RGBA !

256 ^ 3 = 16777216
256 ^ 4 = 4294967296 et pas 18446744073709551615 qui est 256 ^ 8 !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Erreur avec RGBA

Message par Fred »

Code : Tout sélectionner

Debug StrU(RGBA(255, 255, 255, 255), #PB_Long)
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Erreur avec RGBA

Message par Shadow »

Ok merci Fred mais alors pourquoi Debug RGBA(255, 255, 255, 255) donne -1 ?

Code : Tout sélectionner

A.q = RGBA(255, 255, 255, 255)
Debug a
Donne -1 et je suis bien en x64 !
Avant ça fessais pas ça !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Erreur avec RGBA

Message par djes »

C'est marqué dans la doc : https://www.purebasic.com/french/docume ... /rgba.html

Code : Tout sélectionner

a= RGBA(255, 255, 255, 255)&$FFFFFFFF
Debug a
Ca tient à la logique d'un programme sur un microprocesseur avec des registres. Voici un exemple simple pour comprendre

Code : Tout sélectionner

Procedure.b test()
  ProcedureReturn -1
EndProcedure

a.q = test()

Debug a
On s'attend bien à recevoir un nombre négatif, et si le programme renvoyait 255 (ce qui est la "vraie" valeur de -1 sur un octet), la plupart des utilisateurs crierait au scandale.
En gros, PB va utiliser une fonction assembleur qui va "étendre" un nombre négatif d'une plage à une autre. Ainsi -1 en binaire sera aussi -1 si on récupère la sortie sur un word, un long ou un quad.
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Erreur avec RGBA

Message par Shadow »

Cette commande ne réagir pas normalement.
Je suis avec PB 5.44 LTS *64 bits.

Avant ça fonctionnais dans mes souvenir.
Même en 64 Bits j'ai -1 et ça ne devrais pas !

En faite la commande réagir pas correctement sur ma version.
La commande renvoie systématiquement un Integer 32 bits alors que je suis en 64 Bits !

Et ça ne faisait pas ça dans mes souvenir !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Erreur avec RGBA

Message par case »

faudrait voir a lire la notice

la fonction renvoi un nombre 32 bits que tu sois en 64 bit ne change rien
RGBA()

Syntaxe

Resultat = RGBA(Rouge, Vert, Bleu, Alpha)
Description

Renvoie la valeur de la couleur 32 bits correspondant aux valeurs Rouge, Verte, Bleue et Alpha.
Arguments

Rouge, Vert, Bleu La valeur des composantes rouge, verte et bleue de la couleur.

Chaque valeur doit être comprise entre 0 et 255.
Alpha La composante alpha (transparence) de la couleur.

La valeur doit être comprise entre 0 et 255.

Une valeur de 0 signifie une transparence complète et une valeur de 255 signifie une opacité totale.

Valeur de retour

Renvoie la valeur de la couleur.
Remarques

Resultat varie de 0 à 4 294 967 295 teintes. Il est donc conseillé d'utiliser un 'quad', (Resultat.q) et de mettre à zéro les octets inutilisés. En effet, sur un système d'exploitation 32 Bits, Resultat est un integer de type Long (par défaut) dont la plage d'utilisation va de - 2 147 483 648 à + 2 147 483 647.

Utiliser les commandes suivantes Red(), Green(), Blue() et Alpha() pour extraire la valeur d'une des composantes 'Rouge', 'Verte', 'Bleue' ou 'Alpha'.

Un tableau représentant les couleurs les plus communes est disponible ici. Ces fonctions sont utiles lors des opérations de dessin 2D.
Exemple

Couleur.q = RGBA(255, 255, 255, 255) ; Blanc totalement opaque
Debug LSet(Hex(Couleur, #PB_Quad), 16, "0")
Couleur = Couleur & $FFFFFFFF ; mise à zéro des octets inutilisés,
; utile pour la comparaison de couleur
Debug LSet(Hex(Couleur, #PB_Quad), 16, "0")

Exemple

Debug RGBA(0, 0, 0, 0) ; Noir totalement transparent
Debug RGBA(0, 0, 0, 128) ; Noir à moitié transparent
Debug RGBA(0, 0, 0, 255) ; Noir totalement opaque
Debug RGBA(255, 0, 0, 255) ; Rouge totalement opaque
Debug RGBA(0, 0, 255, 0) ; Bleu totalement transparent
Debug RGBA(255, 255, 255, 255) ; Blanc totalement opaque
Debug HEX(RGBA(255, 255, 255, 255)) ; Affiche FFFFFFFFFFFFFFFF

Voir aussi

Red(), Green(), Blue(), Alpha(), RGB()
OS Supportés

Tous
ImageImage
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Erreur avec RGBA

Message par djes »

Je lui ai expliqué, mais il ne comprend pas et continue à croire que c'est une erreur et à râler, en se montrant encore une fois irrespectueux. C'est pénible, j'espère bien qu'il va finir par se corriger...
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Erreur avec RGBA

Message par Patrick88 »

djes a écrit :Je lui ai expliqué, mais il ne comprend pas et continue à croire que c'est une erreur et à râler, en se montrant encore une fois irrespectueux. C'est pénible, j'espère bien qu'il va finir par se corriger...
avec une petite
Shadow a écrit :fessais
:lol:
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Erreur avec RGBA

Message par microdevweb »

Shadow,

Code : Tout sélectionner

b.l=RGBA(255, 255, 255, 255)
Debug Bin(b)
Comme tu peux le voir tous les bits sont à 1, le problème dans purebasic est que les variables sont signées et comme le bit de poids fort (extrême gauche est 1) le résultat est négatif

Code : Tout sélectionner

b.l=-1
Debug Bin(b)
Et oui la comme tu peux le voir tous les bits sont à 1 également et les fonctions de purebasic qui gèrent la couleurs n'en on rien à caller puis-quelles vont lire par 8 bits pour recouvrer le R le G le G et le A.

Alors non s'il s'agis d'un bug c'est dans tes connaissances :twisted:
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Erreur avec RGBA

Message par Shadow »

Après vérification sur des versions largement enterieur à celle-ci...
Je me suis rendus compte que je faisais erreur :oops:

Alors je vous présente humblement mes excuses pour cette erreur ainsi qu'a Fred.
PB fonctionne très bien, c'est moi qui me trompais :wink:

Je ne vois pas en quoi j'ai manqué de respect...
Comme souvent j'ai été disons maladroit.

En faite je comprenais pas pourquoi:

Code : Tout sélectionner

A.q = RGBA(255, 255, 255, 255)
Debug A
Renvoyais -1 puisque je suis en 64 Bits.
J'ai compris maintenant.

Elle renvoie un 32 bits, toujours, même en 64 bits, c'est bien stipulé dans la doc en plus.
Et RGBA(255, 255, 255, 255) en 32 bits fais bien -1 !

Et même avec une variable A.q, RGBA() renvois toujours -1 car c'est le résultat normale !
Et -1 dans une variable de type Quad fait en vraie: 18446744073709551615

Bref j'ai compris mon erreur.
Pas si simple à comprendre quand je m’attendais à recevoir: 4294967296 en 64 Bits !

Se sujet pourra servir à d'autre pour comprendre.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Erreur avec RGBA

Message par djes »

:)
Répondre