Luminance d'un pixel

raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011 - 16 nov. 2007 à 23:23
raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011 - 23 nov. 2007 à 20:47
bonsoir.

comme le titre l'indique, je cherche a connaitre la luminance d'un pixel a l'ecran.
j'ai son RGB, mais je n'ai pas trouvé l'API pour pouvoir connaitre sa luminance.

merci.
bye.

13 réponses

raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011
17 nov. 2007 à 14:56
re

le pire, enfin vu la bouze, serrait le calcule de la teinte.
mais, bon, va pas y'avoir beaucoups de monde a repondre.

bye.
0
Nukleos Messages postés 31 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 31 juillet 2008
18 nov. 2007 à 17:31
Un lien qui devrait être utile :
http://msdn2.microsoft.com/en-us/library/bb773851.aspx

Salut.

Patrick
0
raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011
19 nov. 2007 à 02:15
salut.

merci, c'est exactement ce qu'il me fallais, pfffff, je travaille avec un vieux win32.hlp, va falloir que je prenne une base de données a jour, comme msdn library.

bye.
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
19 nov. 2007 à 09:53
Salut,   le calcul de la luminance est : L (R + G + B)/3 0,333 R + 0,333 G + 0,333 B
Ensuite, ce calcul (simple à la base et équilibré) peut être rendu un peu plus
réaliste comme pour la luminance en vidéo : L = 0,299 R + 0,587 G + 0,114 B (car nous sommes plus sensible au vert et cela s'en ressent sur la luminance effective de la couleur).

La teinte représente plutôt la couleur directrice (exemple bleu ou rouge).
Et la saturation représente la pureté de la couleur.

Exemples:
 - gris c'est
     saturation=0 (ni bleu, ni rouge, ni vert)
     teinte= n'importe quelle valeur (car le gris n'a pas de couleur prédominante)
     luminance=128 par exemple
 - Vert foncé
     saturation=255, car c'est du vert pur
     teinte=128, car c'est du vert
     luminance=128, pour le foncé

Cette partie de code source traite de l'assembleur .... pas de l'API win32 ... merci de contribuer en assembleur .... sinon faites du C.

Gentoo... que du bonheur ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
19 nov. 2007 à 15:07
par ailleur, si tu veux du code optimisé pour calculer la luminance d'une image entière, tu peux te baser sur le code que j'ai posé dans les snippets :
http://www.codyx.org/snippet_image-niveaux-gris_75.aspx
Et je doute fort que ton API win32 le fasse beaucoup mieux et surtout plus rapidement !!

Gentoo... que du bonheur ...
0
raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011
20 nov. 2007 à 02:28
salut.

merci pour les infos.
une petite chose, a dire si je peus me permettre.
l'assembleur ne sert a rien si on ne se sert pas des apis, ps, essayer de faire une fenetre en asm sans api.nukleos m'a fillé une api, et franchement, je ne vais pas m'en priver vu que le codage des couleurs par pc, passe par une formule plus compliqué que L (R + G + B)/3 0,333 R + 0,333 G + 0,333 B.
de plus cette formule, est la seul qui est exacte avec le codage couleur sous windows, car celle que tu me donne je l'ai deja essayé, et ce n'est pas le resultat qui corespond a la luminance de paint.
Cette formule utilise le fpu, je l'ai donc fait, et ca gaze.mais bon que de temp perdu, alors que l'api hop, en 30s vous avez codé.
en plus c'est pour un prog, pas pour un jeux, y'a pas l'feu.

c'etais juste une parenthese.
bonne soirée.
bye.
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
20 nov. 2007 à 10:23
Salut,

Alors primo, le fait que windows ait changé les coefficients de la formule de luminance ne change pas grand chose, en effet, comme je l'ai décrit, les coefficients peuvent être différents pour coller à la réalité (et j'en ai donné l'exemple).

Secundo, je suis d'accord avec toi en ce qui concerne la création des fenêtres, l'API est indispensable pour éviter de longues procédures rébarbatives liées à la gestion de l'interface.

Par contre je suis absolument contre le fait d'utiliser les APIs là où le codage en assembleur prend toute son sens ! Les manipulations d'octets, les manipulations de flux image/audio/vidéo ainsi que les calculs sont les exemples types d'optimisations en assembleur !
C'est dommage de passer à coté d'une telle opportunité quand on se met à l'assembleur !

Tertio, la formule que je t'ai présenté est effectivement en flottant, par contre il n'est pas interdit de ruser quand on fait de l'assembleur, et c'est même recommandé. Ex :

La formule de luminance vidéo :
L = 0.3 * R + 0.59 * G + 0.11 * B
L = 77/65536 * R + 151/65536 * G + 28/65536 * B
L = ((77 * R + 151 * G + 28 * B) / 65536)
or X/65536 => X>>16
donc L=(77*R+151*G+28*B)>>16 !! tu vois encore des floats là ????

Je m'attendais pourtant à mieux au vu de tes questions, je voyais enfin une personne interressé par l'assembleur (fpu, optimisations des calculs ...), mais le coté obscure de l'api a encore frappé.
Je suis vraiment déçu quand je vois les raisonnements du type :
"[...] mais bon que de temp perdu, alors que l'api hop, en 30s vous avez codé. [...]"

Dune2 ... blazé ... mais où sont passés les demomakers, les jongleurs de l'asm, ceux qui font danser les instructions asm pour la beauté du spectacle .... ceux qui rigolent des apis simplistes et génériques et recodent leurs fonctions de traitement de l'image qui semblent s'exécuter en un éclair ... oui cet éclair de génie qui illuminait vos yeux en voyant leur tours de passe-passe s'afficher sans artéfact avec une fluidité inimaginable en utilisant une API standard .... cette fluidité qui les métamorphosait de simple codeur à génie du code asm ...

raoulli: Ce n'est pas aprés toi que j'en ai ;) ce que je dis est générique et adressé à tous les codeurs asm qui ont ce raisonnement !
Tu as fait l'effort de coder la luminance avec le fpu, et c'est vrai que c'est plus long,
mais regarde le code que je t'ai mis en lien pour la luminance ... je l'avais écrit à l'époque où je fesais du traitement d'image en temps-réel, car une personne qui venait de rentrer dans mon équipe ne comprenait pas pourquoi je réecrivais certaines fonctions en asm bien plus long ... alors je lui ai demandé de coder une fonction de luminance comme il en avait l'habitude (utilisation de l'api pour des chose aussi "simple" comme il disait ). Puis on a exécuté nos 2 fonctions sur une image 800x600 en 32 bits ... bilan, sa méthode qu'il considerait exemplaire mettait 12ms ce qui est plutôt bien, et celle en asm avec du SSE mettait 750us ... il a tout de suite compris l'intérêt de l'assembleur et il s'est mis à optimiser tous ses anciens codes en asm et en rusant ... bilan, il a apporté plus de 66% d'efficacité sur nos code ce qui nous a permis de faire bien plus de chose sur notre appli qu'on ne pouvait en espérer ;)
(et au passage il est devenu accro à l'asm ..... )
Voilà ... j'espère que cette anecdote te permettra de comprendre le but du codage asm ;) parfois c'est bien plus long à écrire mais quand le gain d'efficacité est au rendez-vous, quel satisfaction ;)

Gentoo... que du bonheur ...
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
20 nov. 2007 à 11:41
Tout le monde a trouvé l'erreur je suppose :)
La formule de luminance vidéo :
L = 0.3 * R + 0.59 * G + 0.11 * B
L = 77/256 * R + 151/256 * G + 28/256 * B
L = ((77 * R + 151 * G + 28 * B) / 256)
or X/256 => X>>8
donc L=(77*R+151*G+28*B)>>8 :)

Null n'est parfait ;)

Gentoo... que du bonheur ...
0
raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011
20 nov. 2007 à 21:39
salut.

donc L=(77*R+151*G+28*B)>>16 !! tu vois encore des floats là ???? ,je regarderai.
en esperant que ca colle avec le codage windows, mais bon, se serra juste experimental, vu que c'est deja fait, (j'ai ete obligé de faire un debogueur pas a pas specialement pour lui (le fpu), car je ne m'en etait jamais servi, et de plus softice en mode source et hexa, ne gere pas ses registres st(x) domage.Grrrrrr.

et dire qu'on l'appel bas niveau !!!, hihihihi, heureusement, que ce terme signifie le rapprochement du language processeur, et non sa puissance qui en est l'inverse, Et puis quel bonheur le ring 0, enfin..., chacun y trouve son avantage.

Par contre je suis absolument contre le fait d'utiliser les APIs là où
le codage en assembleur prend toute son sens ! Les manipulations
d'octets, les manipulations de flux image/audio/vidéo ainsi que les
calculs sont les exemples types d'optimisations en assembleur ! == entierement daccord, mais bon, c'est pas mon boulot, j'ai pas la journée, j'ai mon dernier projet preque fini 3500 lignes, en me couchant a 3h du mat, une ch'tite api fait pas d'mal, dailleur l'heure de mon post precedant en etait pas loin..
je m'attendais pourtant à mieux au vu de tes questions, je voyais enfin une personne interressé par l'assembleur je ne code qu'en assembleur , car c'est le MEILLEUR des languages,et c'est peut dire.C,C++ languages évolués, hihi.quel blague.
 je code depuis plus de dix ans en asm , alors je ne suis pas pret de m'arreter, c'est comme la clop.

merci, de tes infos, bonne continuation.
a+, sur peut etre une autre question de ma part.
bye.

ps: Par contre je suis absolument contre le fait d'utiliser les APIs là où le codage en assembleur prend toute son sens !
exacte, rien de tel que l'asm pour deffoncer un prog, ou un jeux.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 nov. 2007 à 01:47
Voila des choses qui allaient sans dire mais aussi bien en les disant. Rien de tel qu'une bonne tirade sur les vertus du vrai code asm avant de se coucher.

ciao...
BruNews, MVP VC++
0
raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011
21 nov. 2007 à 21:22
salut.

de mieux en mieux !!!
nukleos, la msdn librairie anglaise doit etre differente de la msdn librairie francaise (si elle existe), car:
VOID ColorRGBToHLS(      
    COLORREF clrRGB,
    WORD *pwHue,
    WORD *pwLuminance,
    WORD *pwSaturation
);

C'EST FAUX,FAUX,FAUX !!!
il semblerait, (enfin c'est une certitude) que dans l'os francais, ils aient inversé ces 2 parametres:
    WORD *pwLuminance,
    WORD *pwSaturation


HLS en anglo.
HSL en francais. (d'ou l'inversement des parametres !!!).

quel blague, mais quel blague, c'est écoeurant.

enfin, c'est pas la premiere fois que je perd mon temps avec ces conneries, ce ne serra pas la derniere, domage.

en vous souhaitant une bonne soirée.
bye.
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
21 nov. 2007 à 22:17
salut,

hummm 2 jours gaspillés pour une inversion de paramètres dans une fonction aussi bateau ... quel gachis de temps ...
Je suis sûr que tu l'aurais codé en moins de temps et de façon plus optimisé (en utilisant les spécificités de ton cpu MMX,SSE,SSE2 et calculs flottants scalaires en 1 cycle d'horloge avec le SSE ...) mais bon ... j'dis ça mais j'dis rien.

Gentoo... que du bonheur ...
0
raoulli Messages postés 93 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 25 avril 2011
23 nov. 2007 à 20:47
salut.

et, oui.
daccord  _dune2_, si,si, fallait le dire.
mais bon, quand ce prob est arrivé, je n'utilisait jamais le fpu, donc, pffff, quoi faire l'apprendre (sachant que je ne resiste jamais a la connaissance de ce que je ne sait pas), ou passer par une fonction rapide ?
donc, je l'ai appris (harf, ca m'emmene j'usqua des 3h00 du mat, en etant obligé de creer un debogueur pour lui, grrrr.), et en plus j'ai utilisé la fonction.
mais, bon, ceci, m'a fait apprendre le fpu. (c'est deja SUPER), ca a changé toute ma logique de calcul, tant mieux, car au moins, je n'ai plus de barriere de virgule (mais mes progs précédants n'en avaient pas besoin).

détrompe toi, ce n'a pas été 2 jours gaspillé (une invertion de parametre OUI, mais par une doc microsoft, attention, hihihii, c'est du microsoft,hi.).

le fpu == totalement maitrisé.
et de plus, ne pas faire confiance aveugle aux docs ( et en plus je me suis deja fait avoir !!!)
hihihihi, incorigible., mais, et oui MAIS (y'a toujours un mais), je verrifie toujours par le celebre softice en mode source.

hophophop, ca me rappel un truc, allez zou , je poste un nouveau thread.
en tout cas, ce post peut etre fermer.
bonne soirée a vous.
bye.
0
Rejoignez-nous