raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 avril 2011
-
16 nov. 2007 à 23:23
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 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.
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 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.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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 !!
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 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.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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 ;)
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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 :)
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 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.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 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.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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.
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 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.