Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

inverser une image par rapport à l'axe X (effet miroir)

4 réponses
Avatar
Jean-Marie
Bonjour

je cherche le moyen d'inverser une image par rapport à l'axe des X
(effet miroir mais de haut en bas, pas de gauche à droite)
quelqu'un a-t'il une piste ?

exp :

| |
| |
|
--------- (axe des X)
|
| |
| |


merci

jean-marie

4 réponses

Avatar
Mayeul
Jean-Marie wrote:
Bonjour

je cherche le moyen d'inverser une image par rapport à l'axe des X
(effet miroir mais de haut en bas, pas de gauche à droite)
quelqu'un a-t'il une piste ?

exp :

| |
| |
|
--------- (axe des X)
|
| |
| |


merci

jean-marie



Je dirais qu'il faut commencer par obtenir l'image sous forme de
BufferedImage, puis déplacer les pixels ligne par ligne. La ligne du
haut en base, la ligne du bas en haut, et on recommence avec les
secondes lignes.
--
Mayeul
Avatar
Samuel Devulder
Jean-Marie a écrit :
Bonjour

je cherche le moyen d'inverser une image par rapport à l'axe des X
(effet miroir mais de haut en bas, pas de gauche à droite)



Je n'y connais pas grand chose, mais il me semble que ces trucs de
zoom/translation/rotations/inversions sont totalement gérées au niveau
de la matrice de transformation associée au Graphic Context (GC).

En draw2d:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/geom/AffineTransform.html

En Swt:
http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/graphics/Transform.html
http://www.java2s.com/Tutorial/Java/0300__SWT-2D-Graphics/TransformReflectaroundthexyaxis.htm

sam.
Avatar
Jean-Marie
merci pour l'info ;
en cherchant sur le net j'ai trouvé :
AffineTransform symmetryX = AffineTransform.getScaleInstance(1, -1);
permettant d'inverser par rapport à l'axe des X, ce qui résout en partie
le pb puisque l'inversion se fait par rapport à un axe horizontale qui
n'est pas à la bonne hauteur

avec l'aide d'un matheux j'ai pu trouver les bons paramètres de la
matrice :
AffineTransform symmetryX = new AffineTransform(1, 0, 0, -1, 0, 2*ymax);

ymax étant l'ordonnée du point en haut en gauche du rectangle englobant
mon image ; ce "2*ymax" est lié à mon contexte mais les autres
paramètres ne devraient pas changer

JM

Samuel Devulder a écrit :
Jean-Marie a écrit :
Bonjour

je cherche le moyen d'inverser une image par rapport à l'axe des X
(effet miroir mais de haut en bas, pas de gauche à droite)



Je n'y connais pas grand chose, mais il me semble que ces trucs de
zoom/translation/rotations/inversions sont totalement gérées au niveau
de la matrice de transformation associée au Graphic Context (GC).

En draw2d:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/geom/AffineTransform.html

En Swt:
http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/graphics/Transform.html

http://www.java2s.com/Tutorial/Java/0300__SWT-2D-Graphics/TransformReflectaroundthexyaxis.htm


sam.


Avatar
Samuel Devulder
Jean-Marie a écrit :
merci pour l'info ;
en cherchant sur le net j'ai trouvé :
AffineTransform symmetryX = AffineTransform.getScaleInstance(1, -1);
permettant d'inverser par rapport à l'axe des X, ce qui résout en partie
le pb puisque l'inversion se fait par rapport à un axe horizontale qui
n'est pas à la bonne hauteur

avec l'aide d'un matheux j'ai pu trouver les bons paramètres de la
matrice :
AffineTransform symmetryX = new AffineTransform(1, 0, 0, -1, 0, 2*ymax);

ymax étant l'ordonnée du point en haut en gauche du rectangle englobant
mon image ; ce "2*ymax" est lié à mon contexte mais les autres
paramètres ne devraient pas changer



Tu pouvais aussi composer les transformations.. en utilisant les
méthodes .translate() et .scale() sur l'instance.