C# [Resolu][ Hors D] Problème de conversion python / c#

Inscrit
5 Juin 2011
Messages
38
Reactions
0
#1
Bonsoir tout le monde. Pour les besoins d'un cours il me faudrait un programme qui puisse associer de manière empirique des valeurs RVB à une longueur d'onde. J'ai donc trifouillé sur internet et trouvé un script en python. que voici :

Code:
def wav2RGB(wavelength):
    w = int(wavelength)

    # colour
    if w >= 380 and w < 440:
        R = -(w - 440.) / (440. - 350.)
        G = 0.0
        B = 1.0
    elif w >= 440 and w < 490:
        R = 0.0
        G = (w - 440.) / (490. - 440.)
        B = 1.0
    elif w >= 490 and w < 510:
        R = 0.0
        G = 1.0
        B = -(w - 510.) / (510. - 490.)
    elif w >= 510 and w < 580:
        R = (w - 510.) / (580. - 510.)
        G = 1.0
        B = 0.0
    elif w >= 580 and w < 645:
        R = 1.0
        G = -(w - 645.) / (645. - 580.)
        B = 0.0
    elif w >= 645 and w <= 780:
        R = 1.0
        G = 0.0
        B = 0.0
    else:
        R = 0.0
        G = 0.0
        B = 0.0

    # intensity correction
    if w >= 380 and w < 420:
        SSS = 0.3 + 0.7*(w - 350) / (420 - 350)
    elif w >= 420 and w <= 700:
        SSS = 1.0
    elif w > 700 and w <= 780:
        SSS = 0.3 + 0.7*(780 - w) / (780 - 700)
    else:
        SSS = 0.0
    SSS *= 255

    return [int(SSS*R), int(SSS*G), int(SSS*B)]

Que j'ai traduit ainsi en c#
Code:
 wavelenght.Text = Convert.ToString(Math.Floor(slider1.Value));
            int lenght = Convert.ToInt16(wavelenght.Text);
            double atenuation = 0;

            if (lenght >= 380 && lenght <= 420)
            {
                atenuation = 0.3 + 0.7 * (lenght - 380) / (440 - 380);
            }
            if (lenght >= 420 && lenght <= 700)
            {
                atenuation = 1;
            }
            if (lenght >= 700 && lenght <= 780)
            {
                atenuation = 0.3 + 0.7 * (750 - lenght) / (750 - 645);
            }


            if (lenght >= 380 && lenght <= 440)
            {

                Red.Value = (((-(lenght - 440) / (440 - 380)) *atenuation ) * 255);
                Green.Value = 0;
                Blue.Value = 1 * atenuation * 255;
            }
            if (lenght >= 440 && lenght <= 490)
            {
                Red.Value = 0;
                Green.Value = ((lenght - 440) / (490 - 440)) * 255;
                Blue.Value = 255 * atenuation;
            }
            if (lenght >= 490 && lenght <= 510)
            {
                
                    Red.Value = 0;
                    Green.Value = 0;
                    Blue.Value = (-1* lenght + 510) / (510 - 490) * 255;
               
            }
            if (lenght >= 510 && lenght <= 580)
            {
                Red.Value = ((lenght - 510) / (580 - 510)) * atenuation * 255;
                Green.Value = 255 * atenuation;
                Blue.Value = 0;
            }
            if (lenght >= 580 && lenght <= 645)
            {
                Red.Value = 255 * atenuation;
                Green.Value = ((-1*lenght + 645) / (645 - 580)) * 255;
                Blue.Value = 0;
            }
            if (lenght >= 645 && lenght <= 780)
            {

                Red.Value = 1 * atenuation * 255;
                Green.Value = 0;
                Blue.Value = 0;
            }
			


            mySolidColorBrush.Color = Color.FromRgb(Convert.ToByte(Red.Value), Convert.ToByte(Green.Value), Convert.ToByte(Blue.Value));

Et la c'est le drame absolu. Le fondu de départ aux alentours des 380nm ne correspond pas du tout, j'ai un gros trou entre 490 et 510 nm ( Erreur : Non numérique ), un passage éclair sur le jaune à 580 et des couleurs figées qui ne tiennent pas compte de la variable atenuation ...

C'est pourquoi je fais appel à vous pour m'aider dans ma quête de solution :)
Merci d'avance à vous je vais encore essayer de creuser un peu et je reviendrais voir par ici.
Bonne soirée :D
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#2
Re: [ Hors D] Problème de conversion python / c#

Je t'avoue que je n'y connaît rien, mais ça a peut être un rapport avec les limites d'Int ou un truc du genre? :/
 
Inscrit
5 Juin 2011
Messages
38
Reactions
0
#3
Re: [ Hors D] Problème de conversion python / c#

Salut sparkounet je viens de trouver le bug qui résider tout juste dans le fait que le Int lenght devait etre déclaré comme Double lenght c'est tout ^^

Merci d'être passé par la :)
A bon entendeur.
Problème résolu
 
Haut Bas