Coucou !
J'ai réussi à faire les dégradés blanc noir et noir blanc, et le polychrome également ! Merci à tous pour votre aide et votre soutien, c'était vraiment cool de votre part !
Une petite question me taraude cependant En effet, on est partis de l'observation de dégradés existants déjà, et on a vu quelles relations liait la couleur à chaque abscisse grâce à ces dégradés déjà construits. On a vu que pour un dégradé monochrome noir-blanc par exemple, les trois composantes suivent une même fonction affine qui monte ; le dégradé polychrome, lui, est soumis à l'interpolation : ainsi chaque composante évolue selon sa propre fonction dont la définition dépend d'un intervalle (parfois il s'agit d'une fonction-constante, parfois d'une fonction affine).
Ma question est : pourquoi ? Pourquoi ça marche ? Pourquoi obtient-on un dégradé polychrome de cette manière ? J'imagine que ce n'est pas un hasard : est-ce une convention d'informaticiens ? Est-ce dû à la nature-même du système RGB ? On peut étendre cette question aux dégradés noir-blanc/blanc-noir : comment se fait-il que mettre une même fonction affine aux trois composantes donne un tel dégradé ?! Là non plus ce n'est pas dû au hasard…
EDIT :
Voici les images :
Et le source final :
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | public void displayHorGraduation(String type) { double w = this.writable_image.getWidth(); double r = 0, g = 0, b = 0; for(int x = 0; x < this.writable_image.getWidth(); x++) { for (int y = 0; y < this.writable_image.getHeight(); y++) { if(type.equals("Blanc vers noir")) { this.writable_pixel_writer.setColor(x, y, Color.color(-x/w + 1, -x/w + 1, -x/w + 1)); } else if(type.equals("Noir vers blanc")) { this.writable_pixel_writer.setColor(x, y, Color.color(x/w, x/w, x/w)); } else if(type.equals("Polychrome")) { if(x >= 0 && x < w/6) { r = 255; g = 1530*x/w; } if(x >= 0 && x < 2*w/6) { b = 0; } if(x >= 2*w/6 && x < 3*w/6) { b = 1530*x/w - 510; } if(x >= 3*w/6 && x < 5*w/6) { b = 255; } if(x >= 5*w/6 && x <= w) { b = -1530*x/w + 1530; } if (x >= w/6 && x < 3*w/6) { g = 255; } if(x >= 3*w/6 && x < 4*w/6) { g = -1530*x/w + 1020; } if(x >= 4*w/6 && x <= w) { g = 0; } if(x >= w/6 && x < 2*w/6) { r = -1530*x/w + 510; } if(x >= 2*w/6 && x < 4*w/6) { r = 0; } if(x >= 4*w/6 && x < 5*w/6) { r = 1530*x/w - 1020; } if(x >= 5*w/6 && x <= w) { r = 255; } this.writable_pixel_writer.setColor(x, y, Color.color(r/255, g/255, b/255)); } } } } |