PureBasic

Forums PureBasic
Nous sommes le Sam 24/Aoû/2019 9:25

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 20 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Lun 30/Jan/2017 15:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1646
Localisation: Belgique
Vous l'aurez sans doute constaté, mais si vous utilisez une couleur sans alpha avec la librairie vector cela ne fonctionne pas. Enfin cela n'est pas tout à fait vrai car cela fonctionne mais le canal alpha est à 0 soit 100% transparent.

Petite explication:
Une couleur RGB est codée sur 24 bits dans une variable de 32 bits comme suit
Code:
; Exemple du'une couleur  R(255)G(32)B(64)
; 00000000     01000000     00100000      11111111
;  Non utilisé     Blue(64)      Green(32)     Red(255)
;
; Soit en hexadécimal
; $4020FF


Vous remarquerez que le codage ce fait de la droite vers la gauche, du bits de poids faible vers le bit de poids fort et que les 8 bits les plus à gauche (les bits de poids fort) sont à 0 car non utilisés.

Voici maintenant la même couleur en RGBA

Code:
; Exemple du'une couleur  A(255) R(255)G(32)B(64)
; 11111111     01000000     00100000      11111111
; Alpha(255)     Blue(64)      Green(32)     Red(255)
;
; Soit en hexadécimal
; $FF4020FF


Vous remarquerez que les 8 bits de poids fort (à gauche) sont tous à 1 pour une valeur de 255 soit 100% opaque.

L'astuce consiste donc juste à modifier les 8 bits de poids fort (à gauche) avec la valeur alpha de son choix sans modifié les autres bits.Pour cela on utilise un opérateur OR | et une masque logique en hexadécimal par soucis de facilité

Code:
$ValeurAlpha000000 ; Masque logique
; La valeur du canal alpha souhaitée sur 8 bits ex: $FF 255,$80 128 etc
; suivie de six zéros pour ne pas modifiée les 24 bits de couleur


Voici un petit exemple avec une couleur rouge R(255)G(48)B(48)

Code:
Define Color.l=$3030FF ; couleur sans la valeur alpha
OpenWindow(0,0,0,800,600,"teste",$cb0001)
CanvasGadget(0,0,0,800,600)
StartVectorDrawing(CanvasVectorOutput(0))
; Ici cela ne fonctionera pas car pas de canal alpha
VectorSourceColor(Color)
AddPathBox(0,0,200,600)
FillPath()
; Ici je place la valeur 255 dans les 8 bits de poids fort (Valeur Alpha)
; je ne modifie par contre pas les 24 bits suivants
VectorSourceColor(Color|$FF000000)
AddPathBox(200,0,200,600)
FillPath()
; Ici je place la valeur 128 dans les 8 bits de poids fort (Valeur Alpha)
; je ne modifie par contre pas les 24 bits suivants
VectorSourceColor(Color|$80000000)
AddPathBox(400,0,200,600)
FillPath()
; Ici je place la valeur 64 dans les 8 bits de poids fort (Valeur Alpha)
; je ne modifie par contre pas les 24 bits suivants
VectorSourceColor(Color|$40000000)
AddPathBox(600,0,200,600)
FillPath()
StopVectorDrawing()

Repeat:WaitWindowEvent():Until Event()=#PB_Event_CloseWindow

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Dernière édition par microdevweb le Mar 31/Jan/2017 11:38, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Lun 30/Jan/2017 17:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6644
Localisation: Isere
Comme dab, ça me dépasse :oops:

Mais par contre ça m'a rappellé les whattmilles fois ou ça marchait pas parce que j'avais pas fait la difference entre une couleur RGBA() et RGB() ou bien parce que certaines couleurs etaient en RGB et avant quie je comprenne le schmilb .... :?
D'ailleurs, je vais surement encore dire une connerie, mais FRED il aurait pas pu mettre une sécurité ou un truc du genre qui permette quand même de voir la couleur si on entre un RGB() ou bien c'est ridicule ?

En tout cas....merci de la combine 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Lun 30/Jan/2017 18:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1646
Localisation: Belgique
@Kwai chang caine,

Ce n'est vraiment que cela ne fonctionne pas, mais une couleur sans le canal alpha (RGB) est codé sur 24 bits (8 pour le R 8 pour le G et 8 pour le B) 3 x 8 nous donne bien 24. Les dites données sont stockées dans une variable de 32 bits :!: . Alors comment sont les 8 bits restants :?: :?: :?: Et bien il sont à zéro.

Donc si on utilise une couleur RGB avec la librairie vector (qui gère le canal alpha) le canal alpha est à 0 soit totalement transparent et donc on ne voie rien.

Donc voila la petite astuce qui permet de remédier à cela, à noter que l'on peut tout à fait utilisé un couleur RGBA avec les fonction 2dDrawing, le canal alpha sera juste ignoré puisque cette librairie ne le gère pas.

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Lun 30/Jan/2017 20:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2159
Localisation: 50200 Coutances
Merci pour ce partage vraiment génial

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Mer 01/Fév/2017 14:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6644
Localisation: Isere
Aaaah d'accord.
Merci Microdevweb pour l'explication 8)
C'est sur que quand on comprend, on souffre moins :lol:

C'est dommage que le paramètre alpha soit, pourrait on dire, optionnel
Si la lib vector nous engueulait quand on lui envoi pas l'alpha, comme une procedure quand on oublie un paramètre, ça éviterait noir de temps recherche de bug.

Bon c'est sur que l'idéal serait de ne pas se tromper, me dirait on... mais tout le monde sait que nous vivons dans un monde imparfait :mrgreen:

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Mer 01/Fév/2017 18:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2159
Localisation: 50200 Coutances
On sent du vécu, on dirait

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Mer 01/Fév/2017 20:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8739
Enfin dans l'aide pour VectorSourceColor(Couleur) c'est tout de même ecrit :
Citation:
La couleur RGBA 32 bits comprenant la transparence alpha.


;)

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 10:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6644
Localisation: Isere
Oui, oui je dit pas le contraire, ce n'est pas la faute de FRED :wink:
Dans l'aide, c'est écrit noir de choses, comme les parametres optionels, et ça ne nous empeche pas de nous gourer tous les jours...enfin surtout moi.

Et à chaque fois, on dit :
"Oh put...de mer.... "j'm'ai" encore fait niq.... la salo.... de NTM de fonctions :? "
Certes, nous usitons à cet occasion emplie d'aversion et d'éréthisme exacerbé, un language qu'il me plairait à qualifier de ...comment dirais-jeeeee ......charretier peut être !!! :mrgreen:

Un exemple parmis tant d'autre qui me vient à l'esprit tellement je souffre encore du nombre de fois ou je me suis fait..... :oops:
Code:
FindString(Chaine$, ChaineCherchee$ [, PositionDepart] [, Mode]])
Et bien, ça a beau être dans la doc, mais si je me fais pas avoir au moins une fois par cette fonction par programme....
Je te rassure, je suis pas le seul, y'a même une tonne de POSTS sur le US sur ce sujet :
http://www.purebasic.fr/english/viewtop ... FindString
http://www.purebasic.fr/english/viewtop ... FindString
http://www.purebasic.fr/english/viewtop ... FindString
http://www.purebasic.fr/english/viewtop ... 02#p464402
etc ......

Et le miens, bien sûr..parce que quand y'a une merde sur le trottoir, et que KCC passe, il a étonnement les pompes qui puent :mrgreen:
http://www.purebasic.fr/english/viewtop ... 43#p452643

Combien de fois je met :
Code:
FindString(Chaine$, ChaineCherchee$ , #PB_String_NoCase)
Et tu peux attendre whatmilles heures que le résultat tombe.....
Même FRED a demandé une idée pour empecher ce probleme, mais personne n'en a :cry:
http://www.purebasic.fr/english/viewtop ... 21#p453321

Tout ça pour dire, que y'a beau avoir une bonne DOC, y'a beau le savoir, et ben on a certaines choses qui ne doivent pas être dans nos gênes, et on se refait avoir, un million de fois. :oops:
Alors une protection, qui "glinegue" quand on met un truc qui faut pas au mauvais endroit...n'est jamais de trop, pour éviter aux "petits nenfants" de ne pas mettre leurs doigts dans les charnieres de portes, ou faire un bain de minuit éternel :cry:
FRED est un grand "Frere", voir même pour certains "notre maitre"....il se doit de protéger ses ouailles de tous les danger de la programmation, afin qu'elle n'aille pas reposer dans de noirs paturages : Psaumes PB - chapitre 10 - verset 1 de la doc : EnseigneMoi :mrgreen:

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 11:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1646
Localisation: Belgique
Il ne faut pas oublier que même si Pb est un langage complet il reste dans la philosophie d'une language bas niveau et performant. Contrairement à d'autres il ne nécessite pas de frameworks, donne des exécutables autonomes légers et performants.

Quel que soit le language, l'informatique fait appel à un système binaire et no processeur on un nombre minimum de bit pouvant être géré (8bits) et suivant le type de variable gère une taille de byte spécifique. Elle cela est régis par les commandes assembleur qui dépendent du type de processeur.

Les différentes tailles dans notre cas sont, 8,16,32,64 bits qui normalement peuvent être déclarée signées (par défaut) ou non signées.

Tient cela change quoi une variable non signée :?:
:arrow: Signée le bit le plus à gauche donne le signe 0 positif, 1 négatif raison d’ailler pour l’a-quel un dépassement de capacité donne une valeur négative (non vérifié avec Pb).
:arrow: non-signée on augmente la capacité de 1 bit, cela ne semble rien mais dans le cas d'une variable 8 bits 2 puissance 7 donne 128 on passe donc de 127 à 255.
Alors qu'avec une 32 bit 2 puissance 31 donne 2147483648 en plus.

Même si cela reste transparent pour nous, les fonctions Pb doivent se plier aux exigences du système et cela demande certain protocoles.

Donc comme le fait remarquer Ars, il est bien spécifié dans la doc que vector gère le canal alpha d'ou la petite astuce (que certains connaissaient surement). Mais le forum étant un site d'échanges je trouvais utile ce petit tuto.

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 14:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2054
au lieu de se prendre le choux avec la logique booleene

on peut aussi le faire en utilisant les fonctions Purebasic

comme ça :
Code:
Define Color.l=$3030FF ; couleur sans la valeur alpha
color2=rgbA(red(Color),green(Color),blue(Color),255) ; couleur AVEC Alpha
VectorSourceColor(Color2)


avantage, c'est quand meme plus lisible non ? ;)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 14:51 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4222
Localisation: Arras, France
Zorro a écrit:
au lieu de se prendre le choux avec la logique booleene

on peut aussi le faire en utilisant les fonctions Purebasic

comme ça :
Code:
Define Color.l=$3030FF ; couleur sans la valeur alpha
color2=rgbA(red(Color),green(Color),blue(Color),255) ; couleur AVEC Alpha
VectorSourceColor(Color2)


avantage, c'est quand meme plus lisible non ? ;)

Totalement d'accord avec toi, en plus ça évite les éventuels problèmes de compatibilité entre plateformes, entre les BGR/RGB etc.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 16:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6644
Localisation: Isere
Zorro a écrit:
on peut aussi le faire en utilisant les fonctions Purebasic
Donc si j'ai bien compris, c'est exactement pareil du moment qu'on met à fond la transparence 8)
Djes a écrit:
Totalement d'accord avec toi, en plus ça évite les éventuels problèmes de compatibilité entre plateformes, entre les BGR/RGB etc.
Alors là, ça m'interpelle "somewhere"..... car je suis justement en train d'essayer de comprendre les couleurs
En RGBA on peut mettre l'ordre des couleurs, BGR et RGB c'est pareil ?? 8O

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 16:15 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4222
Localisation: Arras, France
Kwai chang caine a écrit:
Zorro a écrit:
on peut aussi le faire en utilisant les fonctions Purebasic
Donc si j'ai bien compris, c'est exactement pareil du moment qu'on met à fond la transparence 8)
Djes a écrit:
Totalement d'accord avec toi, en plus ça évite les éventuels problèmes de compatibilité entre plateformes, entre les BGR/RGB etc.
Alors là, ça m'interpelle "somewhere"..... car je suis justement en train d'essayer de comprendre les couleurs
En RGBA on peut mettre l'ordre des couleurs, BGR et RGB c'est pareil ?? 8O

Non, mais les fonctions PB vont renvoyer le format correspondant à la plateforme, tandis qu'un code perso qui ne ferait aucun test pourrait renvoyer une valeur inadaptée.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 16:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6644
Localisation: Isere
Aaaah !!! parce que RGB et BGR ça dépend de l'OS ?? 8O

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] Utiliser une couleur sans alpha avec vector
MessagePosté: Jeu 02/Fév/2017 16:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6849
Localisation: IDF (Yvelines)
Kwai chang caine a écrit:
Aaaah !!! parce que RGB et BGR ça dépend de l'OS ?? 8O
Non je pense que ça dépend de la notation.

Plot(0, 0, $FF0000)) c'est de la notation BGR
Plot(0, 0, RGB($00,$00,$FF)) c'est de la notation RGB (of course)

Source : https://www.purebasic.com/french/docume ... table.html (Généralités)

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 20 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye