IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)



Comment faire une capture d'écran ?
auteur : Clément Cunin
La classe <javaClass class="java.awt.Robot" /> permet de faire facilement des captures d'écran.

Capture d'une zone :

Robot robot = new Robot();BufferedImage image = robot.createScreenCapture(new Rectangle( 15, 15, 150, 150));
Capture de tout l'écran :

Robot robot = new Robot();BufferedImage image = robot.createScreenCapture(<br_l/> new Rectangle(java.awt.Toolkit.getDefaultToolkit().getScreenSize()) );
Capture d'une fenêtre :

Robot robot = new Robot();BufferedImage image = robot.createScreenCapture(<br_l/>new Rectangle( frame.getX(), frame.getY(), frame.getWidth(), frame.getHeight() )<br_l/>);
lien :
lien : Comment connaître la taille de l'écran ?

Comment accéder à une image ?
auteur : Clément Cunin
Type de fichier supporté :
GIF, JPEG et PNG. Pour lire des images encodées dans d'autres formats, vous devez utiliser une bibliothèque externe.

Dans un applet :
La classe Applet fournit tout le nécessaire pour la lecture d'image :

Image java.applet.Applet.getImage(URL url);Image java.applet.Applet.getImage(URL url, String name);
Dans une application :
Pour une application (Awt ou Swing), il faut utiliser les méthodes de la classe <javaClass class="java.awt.Toolkit" />

<comment> Accès au toolkit :</comment> java.awt.Toolkit toolkit = java.awt.Toolkit.getToolkit();<comment> lecture de l'image :</comment> Image image = toolkit.getImage("fichier"); Image image = toolkit.getImage(url);
Dans un Jar :
Si l'image se trouve dans une archive, le plus simple est de laisser le ClassLoader trouver le fichier. Cette solution est valable que l'image se trouve ou non dans une archive, il est donc préférable de toujours utiliser le ClassLoader afin de limiter les problèmes lors du déploiement de l'application/applet.

java.net.URL url = getClass().getResource("chemin/nom.gif");
lien :
lien :

Comment enregistrer une image ?
auteur : Jean-Baptiste Bugeaud
JDK 1.4 :
Le JDK1.4 introduit le "imaging I/O framework" qui permet d'écrire des images dans la majorité des formats courants :  http://java.sun.com/j2se/1.4/docs/guide/imageio/index.html

JDK antérieur :
Java ne permettait pas d'enregistrer une image au format GIF, PNG ou JPEG. Il va falloir faire appel à des classes extérieures permettant le codage de l'image.

lien :  Une page très interressante sur les différentes librairie disponible pour la lecture et l'écriture des images.

Comment mettre une image en fond de JFrame ?
auteur : Clément Cunin
L'ajout d'image en fond de composant n'est pas possible avec les classes de base de Swing. Heureusement, la réalisation d'une telle classe n'est pas compliquée, il suffit de créer un nouveau composant héritant de JComponent et de surcharger la méthode paintComponent.

La méthode paintComponent(Graphique g) est chargée de dessiner le composant ; les composants fils seront dessinés par dessus plus tard.

Exemple (Swing):

public class MonPanel extends JComponent<comment>variable de classe contennant l'image à afficher en fond</comment>private Image bg;<comment>Surcharge de la fonction paintComponent() pour afficher notre image</comment> public void paintComponent(Graphics g)g.drawImage(bg,0,0,null);
Exemple (AWT):

public class MonPanel<comment>variable de classe contennant l'image à afficher en fond</comment>private Image bg;<comment>Surcharge de la fonction paint() pour afficher notre image</comment> public void paint(Graphics g)g.drawImage(bg,0,0,null);
Note :
Vous pouvez placer le composant dans la JFrame en utilisant la méthode setComponentPane(moncomposant).

Fichier joint :
Vous trouvez, dans les liens ci-dessous, un exemple complet d'implémentation d'un tel objet, permettant d'afficher l'image en mosaïque ou centrée.

téléchargement : Extension de JPanel pour afficher des images en arrière-plan.
téléchargement : Exemple d'utilisation de la classe.

Comment convertir une image en une instance de BufferedImage ?
auteur : Clément Cunin
Beaucoup d'opérations de manipulation d'image ne travaillent que sur des <javaClass class="java.awt.image.BufferedImage"/>. La vie étant parfois mal faite, il est courant de trouver dans l'API des méthodes nous retournant des images, mais assez rarement des bufferedImages, il nous faut donc convertir ces images... Voici une méthode qui s'occupe de tout :

BufferedImage toBufferedImage(Image image) <comment>On test si l'image n'est pas déja une instance de BufferedImage</comment>if( image instanceof BufferedImage )<comment>cool, rien à faire</comment>return( (BufferedImage)image );else<comment>On s'assure que l'image est complètement chargée</comment>image = new ImageIcon(image).getImage();<comment>On crée la nouvelle image</comment>BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB );Graphics g = bufferedImage.createGraphics();g.drawImage(image,0,0,null);g.dispose();return( bufferedImage );

Comment convertir une image couleurs en niveaux de gris ?
auteur : Clément Cunin
Les modifications de couleur d'une image sont assurées par la classe <javaClass class="java.awt.image.ColorConvertOp"/> qui travaille à partir de <javaClass class="java.awt.image.BufferedImage"/>.

ColorConvertOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY),null);BufferedImage imageGrise = op.filter(bufferedImage,null);
lien : Comment convertir une image en une instance de BufferedImage ?

Comment rendre floue une image ?
auteur : Clément Cunin
L'algorithme permettant de rendre une image floue travaille très simplement : la couleur d'un pixel est calculée en faisant la moyenne pondérée de sa couleur et de celles de ses voisins. Il suffit de modifier les coefficients et le nombre de voisins pour intervenir sur le résultat, plus le poids des voisins est important, plus l'image sera floue. De plus, on peut choisir le poids d'un voisin en fonction de sa position, ce qui permet d'attribuer des poids différents et d'obtenir des résultats surprenants...

float[ ] matrice = {<br_l/>0.1, 0.1, 0.1,<br_l/>0.1, 0.2, 0.1,<br_l/>0.1, 0.1, 0.1<br_l/>};BufferedImageOp op = new ConvolveOp(new Kernel(3,3,matrice));BufferedImage nouvelleImage = op.filter(bufferedImage, null);
lien : Comment convertir une image en une instance de BufferedImage ?

Comment effectuer des transformations sur une images en mémoire ?
auteur : Clément Cunin
Il n'est pas possible d'effectuer de transformation directement sur une image mémoire, il faut créer un nouvelle image et dessiner la version transformée dans cette nouvelle image.

<comment>Création d'une nouvelle image</comment>BufferedImage nouvelleImage = new BufferedImage(imageSource.getWidth(),imageSource.getHeight(),imageSource.getType());Graphics2D g2d = nouvelleImage.createGraphics();<comment>préparation de la transformation</comment>AffineTransform at = new AffineTransform();at.rotate(angle,x,y);g2d.drawImage(imageSource,at,null);g2d.dispose();

Comment manipuler directement les pixels de mon image ?
auteur : Clément Cunin
C'est à mon avis une assez mauvaise idée. Les méthodes de la classe <javaClass class="java.awt.Graphics"/> sont généralement des appels directs des fonctions de la carte vidéo ou d'une bibliotheque graphique (DirectX ou autre), bref.

Lecture d'un pixel :

<comment>Lecture d'un seul pixel :</comment>int rgb = bufferedImage.getRGB(x,y);<comment>Lecture de tous les pixels :</comment>int w = bufferedImage.getWidth();int h = bufferedImage.getHeight();int[] rgbs = new int[w*h];<comment>on crée l'espace neccessaire</comment>bufferedImage.getRGB(0,0,w,h,rgbs,0,w);
Ecriture d'un pixel :

<comment>Ecriture d'un seul pixel :</comment>bufferedImage.setRGB(x,y,rgb);<comment>Ecriture de tous les pixels :</comment>int w = bufferedImage.getWidth();int h = bufferedImage.getHeight();int[] rgbs = new int[w*h];bufferedImage.setRGB(0,0,w,h,rgbs,0,w);
lien : Qu'est-ce que l'encodage entier RGBA des couleurs d'une image ?

Qu'est-ce que l'encodage entier RGBA des couleurs d'une image ?
auteur : Clément Cunin
Pour des raisons de performance on utilise un seul entier pour coder les trois couleurs primaires (rouge, vert, bleu) et la composante alpha (le niveau de transparence). Chaque composante est codée sur 8 bits (bleu 0-7, vert 8-15, rouge 16-23, alpha 24-31).

<comment>Lecture manuelle des composantes :</comment>int rgb = bufferedImage.getRGB(x,y);int alpha = (rgb >>24 ) & 0xFF;int rouge = (rgb >>16 ) & 0xFF;int vert = (rgb >> 8 ) & 0xFF;int bleu = rgb & 0xFF;<comment>Construction d'un pixel :</comment>int rgb = (alpha<<24)+(rouge<<16)+(vert<<8)+bleu;<comment>Les composantes doivent obligatoirement être comprises dans l'intervalle 0-255</comment>
lien : Comment manipuler directement les pixels de mon image ?

Comment redimensionner une image ?
auteur : Pierre-Yves Varoux
Redimensionnemant d'une image :
Utilser simplement la méthode <javaMethode class="java.awt.Image" methode="getScaledInstance(int, int , int)"/> de la classe <javaClass class="java.awt.Image"/>.

Redimensionnemant d'une BufferedImage :

<comment_javadoc>Effectue une homothétie de l'image.@param bi l'image.@param scaleValue la valeur de l'homothétie.@return une image réduite ou agrandie.</comment_javadoc>public static BufferedImage scale(BufferedImage bi, double scaleValue) AffineTransform tx = new AffineTransform();tx.scale(scaleValue, scaleValue);AffineTransformOp op = new AffineTransformOp(tx,<br_l/>AffineTransformOp.TYPE_BILINEAR);BufferedImage biNew = new BufferedImage( (int) (bi.getWidth() * scaleValue),<br_l/>(int) (bi.getHeight() * scaleValue),<br_l/>bi.getType());return op.filter(bi, biNew);<br_l/>
Note :
Un coefficient supérieur à 1 correspond à un agrandissement, un coefficient inférieur à 1 correspond à une réduction.


Comment changer l'icone de la fenêtre de mon application ?
auteur : Clément Cunin
L'icone d'une application apparait à divers endroits en fonction du système d'exploitation. Sous windows, on la retrouve en haut à gauche de la fenêtre, et dans la barre des taches. Par defaut il s'agit de la tasse de café de Java, il est très facile de la personnaliser en utilisant la méthode <javaMethode methode="setIconImage(java.awt.Image)" class="javax.swing.JFrame" /> des classes <javaClass class="javax.swing.JFrame" /> et <javaClass class="javax.swing.JDialog" />.

Image icone = Toolkit.getDefaultToolkit().getImage("./monImage.jpg");maFenetre.setIconImage(icone);
Si l'image n'apparaît pas, c'est certainement que le paramètre image a une valeur 'null'.

lien : Comment accéder à une image ?


Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.