Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > Qt
Qt Forum d'entraide technique sur la bibliothèque Qt. Avant de poster -> F.A.Q Qt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 16h17   #1
Membre habitué
 
Avatar de Rodrigue
 
Inscription : août 2002
Messages : 476
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 476
Points : 112
Points : 112
Envoyer un message via MSN à Rodrigue
Par défaut Récupérer la couche "Hue" à partir d'une image 32 bits

Bonjour,

J'ai un problème: j'essaye de récupérer 3 images représentant respectivement les composants HSL (Hue/Saturation/Lightness) d'une image. Je pensais que cela serait facile car tout est déjà dans Qt pour le faire.
La vitesse n'est pas un point crucial donc j'utilise avec excès setpixel et getpixel (attendons déjà que ça fonctionne LOL ).
Voici mon bout de code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    static void ComputeImagesHSL(QImage& oimg, QImage& H, QImage& S, QImage& L)
    {
        QColor colorRGB;
        QColor colorH, colorS, colorL;
        H = S = L = oimg; //modify!
 
 
        qreal hf, sf, lf, af;
 
        //int32_t * pRGBA = image.bits();
 
        for (int y = 0; y <oimg.height(); y++)
        {
            for (int x = 0; x <oimg.width(); x++)
            {
                colorRGB = oimg.pixel(x, y);
                colorRGB.getHslF(&hf, &sf ,&lf, &af);
 
                int t;
                if(!colorRGB.isValid())
                    t=0;
                //qDebug("%5.3f %5.3f %5.3f %5.3f", hf,sf,lf,af);
               // hf = hf/360.0f;
                //hf = qMin(hf, (qreal)1.0f);
                //hf = qMax(hf, (qreal)0.0f);
                if(hf<0)
                    hf = 0;
 
                if(hf>1)
                    hf=1;
 
                colorH = QColor::fromRgbF(hf,hf,hf,af);
                colorS = QColor::fromRgbF(sf,sf,sf,af);
                colorL = QColor::fromRgbF(lf,lf,lf,af);
 
                if(!colorH.isValid())
                    t=0;
 
                H.setPixel(x, y, colorH.rgb());
                S.setPixel(x, y, colorS.rgb());
                L.setPixel(x, y, colorL.rgb());
            }
        }
J'ai placé des breakpoints sur les différents if: aucun ne déclenche!

Mon image H lorsque je l'affiche présente de grosse zone saturée blanche. Cela ne correspond pas du tout à la couche Hue que je suis censé récupérer...

Si quelqu'un à une idée!!!
__________________
Rodrigue
Rodrigue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 18h21   #2
Responsable C++
 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 2 866
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 36
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 2 866
Points : 12 941
Points : 12 941
Bonjour

J'ai testé ton code, ça fonctionne correctement (j'ai testé avec http://www.normankoren.com/Stepchart_large_HSL.jpg). Ton image est bien en rgb ? Comment tu affiches le résultat ?

Sinon, quelques remarques :
- pourquoi static ? ce n'est pas une fonction membre
- les if(h<0) et if(h>0) inutiles
- il y a une fonction pour récupérer directement la valeur de hue
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP.

Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU.

Je suis régulièrement sur le chat pour les questions C++/Qt.
gbdivers est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h58.


 
 
 
 
Partenaires

Hébergement Web