Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de couleur et de math

Sujet résolu
    9 octobre 2007 à 18:58:43

    Salut à tous,
    Je suis en train de faire un programme qui est censé me donner le taux de rouge de bleus et de vert dans un fichier texte, sur des couleurs que j'aurais créer en ajoutant ou diminuant le rouge, le vert et le bleu lors de l'éxécution du programme. Je met l'écran tout noire au début, et grâce à des variables, j'augmente ou diminue ces variables (qui représente le rouge...vous avez compris :p ) et rechange en direct l'écran pour que ça corresponde.

    En gros on appuis sur des touches et la couleur change, et quand on appuis sur "Entrée", un fichier est créer où le taut de rouge de.... est notés (autant de fois qu'on appuis sur entrée lors de l'execution, le se vide quand on redémmare le programme, donc on peus consulter les résultats pendant, mais aussi après).

    Le seul problème (et c'est bien le seul) c'est que la variable (je fais que pour le rouge pour l'instant), quand je la fais decendre, bas elle devient -2....-300...-623 etc et j'aimerais qu'elle me donne le chiffre entre 0 et 255 :colere2: .
    Voici la méthode (m_a désigne le chiffre qu'on obtient après avoire changer le rouge):
    1. int Fenetre::getR()
    2. {
    3.     if (m_a<0)
    4.     {
    5.         if((m_a/255)<1)
    6.         m_a+=255;
    7.         else
    8.         m_a=m_a-(((m_a/255)*255)-255);
    9.     }
    10.     return m_a;
    11. }


    Elle marche bien quand le nombre est entre 0 et -255, mais quand c'est au dela, ça ne marche plus du tout :( . Ici ce n'est qu'un problème de math...... ou alors je m'y prend hyper mal :D .

    PS: je sais que la méthode est pas finis, en effet il manque la partis où m_a est positif, mais j'aurais le même problème que pour les négatifs donc, quand j'aurais régler pour les négatifs, ça serat la même pour les positifs.
    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2007 à 19:29:39

      j'ai un probleme pour tout régler d'un coup :

      tu stockes ta valeur m_a en tant que "unsigned char".
      Le range de unsigned char est 0 .. 255 (pile ce qu'il faut pour une couleur, c'est d'ailleurs fait expres)

      Et, avec les unsigned char, quand tu fais :
      0 - 1 -> ça donne 255
      quand tu fais 255 + 1 -> ça donne 0

      c'est cyclique :) Il faut en profiter !
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        9 octobre 2007 à 20:05:46

        Sinon il y a aussi l'opérateur % (modulo) qui est le reste de la division entière (j'ai bien apris ma leçon :))

        exemple :

        0 % 255 = 0
        1 % 255 = 1
        ...
        254 % 255 = 254
        255 % 255 = 0
        256 % 255 = 1

        tu n'es ainsi pas "attaché" à un type de donnée et c'est tout aussi cyclique.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          9 octobre 2007 à 20:11:35

          Perso je ferais en sorte que la valeur de ta variable reste entre 0 et 255 quand l'utilisateur appuie sur les touches. var < 0 ? var = 255 ? (var > 255 ? var = 0 : var = var) ou qqch comme ça.
          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2007 à 21:05:23

            Merci, c'est vrai, Hiura, je n'avais pas penser à ça (des fois, le plus simple reste le plus difficile à deviner pour moi :-° ). C'est bête, mais en y repenssant, je pense que j'aurrait put trouvé tout seul, mais il à fallut que je me complique là vie. Merci Fvirtman, je ne connaissais pas cette propriété cyclique des unsigned char (je savais juste qu'ils n'étaient que positif :p ).
            • Partager sur Facebook
            • Partager sur Twitter

            Problème de couleur et de math

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown