Affichage des articles dont le libellé est Image. Afficher tous les articles
Affichage des articles dont le libellé est Image. Afficher tous les articles

vendredi 18 janvier 2013

Fusionner deux images en Java

La fusion de deux images en Java est assez simple.

Il faut transformer les deux images en BufferedImage.

Ensuite, rien de plus simple :
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

// Buffer image with transparancy support (alpha chanel)
final BufferedImage image = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB) ;
final BufferedImage tilePicture = ....
// Graphic
final Graphics2D g2 = image.createGraphics() ;

g2.drawImage(tilePicture, object.getX(), object.getY(), null) ;

Le null peut être remplacé par un java.awt.image.ImageObserver qui permet d'être notifié lorsque l'image est prête.

lundi 14 janvier 2013

Transparence dans les images Java

Java permet de créer nativement des images transparentes.

Lorsqu'une image est créée, si le paramètre BufferedImage.TYPE_INT_ARGB est indiqué, l'image supportera l'alpha chanel, soit la gestion de transparence.

Par défaut, toute l'image est transparente.

Il peut être intéressant de créer un couleur de transparence qui sera mis dans un tableau par exemple.

Ci dessous voici un exemple complet d'image transparente et de création de couleur transparente :
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

// Buffer image with transparancy support (alpha chanel)
final BufferedImage image = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB) ;

// Graphic
final Graphics2D g2 = image.createGraphics() ;

// Create color. True is to say the color value contain alpha chanel
// Here, alpha chanel is 0x00
Color c = new Color(0x00FFFFFF, true) ;

g2.setColor(color) ;

final Rectangle rect = new Rectangle(0, 0, 19, 19) ;

// All picture is transparent. Realy not necessary because at create time all picture is transparent
g2.fill(rect) ;

// No transpancy
Color c = new Color(0x000000) ;

// Draw line
g2.drawLine(0, 0, 19, 19) ;

vendredi 7 septembre 2012

Créer dynamiquement une image en Java

Il y a peu, j'ai voulu créer un ripper d'image du jeu mythique des années 90, "Jill of the Jungle".
J'ai trouvé sur le site www.shikadi.net une explication sommaire des fichiers d'image.
Il me fallait donc créer une image dynamiquement et l'enregistrer.

J'ai cherché de la documentation à ce sujet. J'ai trouvé l’officielle d'Oracle, très sommaire, et des exemples sur internet un peu trop complexe.

L'idée est simple : créer une image, dessiner un pixel et l'enregistrer.

Voici l'exemple ci-dessous.
BufferedImage image =
    new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB) ;

Graphics2D g2 = image.createGraphics() ;
  
BufferedImage image =
    new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB) ;

Graphics2D g2 = image.createGraphics() ; 

g2.setColor(color) ;
                  
g2.drawLine(x, y, x, y) ;

outputfile = new File(fileName) ;
ImageIO.write(bi, "png", outputfile);
Création de l'image (un BufferImage puisque tout est en mémoire), de type Alpha (transparence), red, green, blue.
Création d'un graphic (objet permettant le dessin).
Définition de la couleur du pinceau.
Dessin du pixel.

Graphic2D ne permet pas de dessiner un pixel, via une méthode. On dessine donc une ligne, d'un point.

A la fin, est utilisé la classe ImageIO pour enregister le buffer.

C'est aussi simple que ça