Bonjour,
Existe-t-il quelque chose quelque part qui me permette avec java de détourer une image automatiquement.
Je rêve...
Bonjour,
Existe-t-il quelque chose quelque part qui me permette avec java de détourer une image automatiquement.
Je rêve...
dans l'API de base non bien qu'il soit possible de s'en coder un pas trop difficilement nottament pour la partie recuperation du resultat a la fin.
En gros : une fois que tu as obenu la forme (Shape, Area) correspondant a ta selection, tu connais les dimensions de l'image destination grace a sa bounding box et ensuite tu peux recuperer les parties de l'image a l'interieur grace a la composite AlphaComposite.SrcIn.
On cree une image completement transparente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 BufferedImage newImage = new BufferedImage(..., ..., BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = image.createGraphics(); try { // Faire la translation appropriee pour que l'image source et la forme soient bien alignees dans la nouvelle image. g2d.setColor(Color.BLACK); g2d.fill(shape); g2d.setComposite(AlphaComposite.SrcIn); g2d.drawImage(oldImage, ..., ..., null); } finally { gd2.dispose(); }
Puis, on dessine la forme en noir, puis on met la bonne composite et on finit par dessiner l'image par dessus.
L'image source remplira alors toutes les parties noires de la forme et le reste sera transparent.
Cette methode est a preferrer par rapport a l'usage de setClip() sur le Graphics car ici on peut conserver l'antialiasing (penser a faire jouer les RenderingHints du Graphics si on en veut pas au contraire).
Sinon setClip() marche aussi mais bon voila pas d'antialias.
En fait le plus dur va etre d'editer la forme via un outil de type pipette (algorithme de flood), de dessin de forme predefinies (Shape, Rectangle2D, Ellipse2D, etc.), de detourage manuel (Path, Path2D, GeneralPath) et de concatenation des differents modes (Area). Bref c'est faire cet editeur avec ses differents modes et sa manipulation de formes vectorielles qui sera le plus long a coder.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 BufferedImage newImage = new BufferedImage(..., ..., BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = image.createGraphics(); try { // Faire la translation appropriee pour que l'image source et la forme soient bien alignees dans la nouvelle image. g2d.setClip(shape); g2d.drawImage(oldImage, ..., ..., null); } finally { gd2.dispose(); }
Merci de penser au tagquand 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
Oui, super grand merci, mais en fait je me suis un peu trompé dans ma question... je voudrais non seulement détourer, mais de plus découvrir automatiquement la forme que contient une image... si elle contient une forme.
hum![]()
Hum alors la bien sur definitivement non dans l'API de base. Aucune idee si le JAI permet de faire ce genre de choses. Peut-etre dans ImageJ ?
Merci de penser au tagquand 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
Partager