Bonjour, j'ai un BufferedImage et je veux dessiner un rectangle dans ce BufferedImage en utilisant la couleur inverse de chaque pixel sous la ligne.
Et en plus mon rectangle doit pouvoir être dessiné avec une rotation ...
des idées ?
Bonjour, j'ai un BufferedImage et je veux dessiner un rectangle dans ce BufferedImage en utilisant la couleur inverse de chaque pixel sous la ligne.
Et en plus mon rectangle doit pouvoir être dessiné avec une rotation ...
des idées ?
Je ne suis pas sûr d'avoir compris votre question, vous cherchez à passer des pixels en vidéo inverse à l'intérieur d'une zone rectangulaire?
Si je ne me trompe pas, on peut faire passer un pixel en vidéo inverse en inversant chaque valeur de sa couleur rgb. (En prenant 255 - valeur.) Les fonctions getRGB(x, y) et setRGB(x, y) renvoient les codes RGB (avec les trois valeurs) de chaque pixel. Il suffit de faire des boucles et d'inverser chaque pixel.
Bonjour et merci de la réponse.
J'ai déja le systeme de boucle en gérant pixel par pixel, mais comme il faut que je puisse dessiner avec un angle je pensais passer par un Graphics2D en utilisant une AffineTransform et en dessinant un rectangle directement dans mon Graphics2D avec g2d.drawRect().
En fait je ne sais pas comment faire et je tourne en rond a défaut de faire tourner mon rectangle !!
Qu'est-ce qui vous empêche d'utiliser le système de boucles avec un angle?
pour faire un truc de ce genre, je pense que créerais une nouvelle bufferedimage de la taille du rectangle désiré, que j'utiliserais son Graphics pour écrire les nouvelles valeurs des pixels que j'aurais obtenu en effectuant la rotation inverse de celle du rectangle ,puis en faisant un getSubImage().
C'est peut être un peu confus, là, non ?
Bon... En gros, je peindrais la bufferedimage tournée dans le sens inverse de la rotation du rectangle sur unhe nouvelle buffered image. Puis je clipperais tout ça avec un getsubimage, et ensuite j'utiliserais les pixels pour les modifier un à un. Voilà, voilà, c'est l'idée à la volée...
La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique
Je pense que ton principal probleme est de trouver les pixels a modifier dans ta zone rectangulaire (apres rotation).
Pour ma part, je pense que ce qui suit est assez facile:
- cree une nouvelle BufferedImage de la meme taille que la premiere
- la peindre en blanc (par exemple)
- dessiner ton rectangle en noir(toujours par exemple)
- faire tourner ton rectagle det l'angle desire grave a des AffinTransform
Je sais pas si j'ai ete assez clair.....
- parcourir l'image ainsi generee, des que tu tombes sur un pixel noir, alors sur ton image original tu changes la valeur du pixel de meme coordonnees
mon niveau lamentable en trigo !Envoyé par BugFactory
Cela n'est'il pas tout simplement possible en se mettant en mode XOR ?
Voir http://java.sun.com/j2se/1.5.0/docs/.../Graphics.html
Penser a faire un setPaintMode() pour revenir en mode normal une fois termine.
Pour la rotation, desole, mais c'est relativement facile sans etre super-mega fort en trigo. Soit un rectangle de coordonnees x et y et de taille width et height.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 int centerX = x - width /2; int centerY = y - height /2; // Faire des essais pour trouver la couleur appropriee. graphics.setXORMode(...); graphics.setColor(...); // On se met sur le centre de rotation. graphics.translate(centerX, centerY); // On calcule le decalage d'angle. double angle = (2 * Math.PI) / n; // On dessine chaque rectangle. for (int i = 0 ; i < n ; i++) { graphics.fillRect(- width / 2, - height / 2, width, height); graphics.rorate(angle); } // On revient a l'angle initial. graphics.rotate(- n * angle); // On revient a l'orgine initial. graphics.translage(- centerX, - centerY); graphics.setPaintMode();
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
merci bouye !
quel temps fait il a Nouméa ?
[HS]Il pleut et il y a eût un coup d'ouest* en début de matinée.
*Pour ceux qui ignorent ce que c'est : de forts vents violents qui arrivent par l'ouest de manière imprévisible en général. Ce qui peut être dangereux pour les navires y compris ceux au port car les rades de Nouméa n'offrent pas trop de protection de ce côté-là alors qu'elles sont bien abritées des vents habituels venant du sud-est.[/HS]
Pense au bouton/tag si tu as trouvé solution à ton problème.
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager