Bonjour,
Existe-t-il quelque chose quelque part qui me permette avec java de détourer une image automatiquement.
Je rêve...
Version imprimable
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:
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:
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(); }
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 :dehors:
:scarymov:
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 ?