25
avr
08

Miroir mon beau miroir

L’un des effets graphiques les plus à la mode et les plus apprécié ces derniers temps est le reflet. Ce serait bien dommage de s’en passer pour des applications mobiles.

L’idée est de partir, par exemple, de cette image :

Image initiale

Et d’obtenir le résultat suivant :

Image avec reflet

Attention, ce code est pour J2ME et privilégie la lisibilité/simplicité, il doit donc absolument être retravaillé/optimisé si vous souhaitez l’utiliser. Vous pouvez d’ailleurs proposer vos améliorations en commentaire.

public class Reflet extends GameCanvas {
private Image img; // L'image initiale
private int heightReflexion = 35; // La hauteur en pixel du reflet
public Reflet(Image img) {
super(false);
this.img = img;
}
public void paint(Graphics g) {
// Dessine l'image initiale
g.drawImage(img, 0, 0, Graphics.LEFT |Graphics.TOP);
 
// Va contenir le format RAW du reflet
int[] rawInput = new int[heightReflexion * img.getWidth()];
// Stocke dans rawInput les pixels nécessaires pour faire le reflet
img.getRGB(rawInput,
    0,
    img.getWidth(),
    0,
    img.getHeight() - heightReflexion,
    img.getWidth(),
    heightReflexion);
// Le principe est d'afficher ligne par ligne le reflet
// Pour faire l'effet miroir, la 1ere ligne doit s'afficher
// à heightReflexion pixels depuis le bas de l'image initiale,
// la dernière ligne doit s'afficher à 0 pixel depuis le bas
// de l'image initiale
int[] line = new int[img.getWidth()];
for (int i=0; i<heightReflexion; i++) {
// Isole une ligne du reflet
System.arraycopy(rawInput,
    i * img.getWidth(),
    line,
    0,
    img.getWidth());
// Pour chaque pixel de la ligne on modifie la transparence
for (int k=0; k<line.length; k++) {
line[k] = (line[k] & 0xFFFFFF) | ((int) ((0x660000) << 8)); 
}
// Dessine la ligne
g.drawRGB(line, // La ligne à afficher
0, // Pas de offset, affiche la ligne dans son intégralité
img.getWidth(), // Largeur d'une ligne
0, // Position X du reflet
img.getHeight() + heightReflexion - i, // Position Y du reflet
img.getWidth(), // Largeur d'une ligne
1, // Hauteur d'une ligne
true); // Gestion de la transparence
}
    }
}

2 Réponses vers “Miroir mon beau miroir”


  1. 1 Alexis
    5 mai 2008 à 13:06

    Comme quoi on peut aussi faire du graphisme sur les mobiles ! A quand Gimp en ME ? ;)

  2. 5 mai 2008 à 20:43

    Du Gimp, n’exagérons pas ;)

    Par contre une annonce comme celle-ci, nous fait apparaitre d’énorme possibilité. Bien entendu, avant de s’emballer il faut tester ;) Ce que je vois d’intéressant, c’est qu’une autre communauté (celle des Flashers) va pouvoir se mettre à développer des applis J2ME, et plus seulement des codeurs purs et durs.


Laisser un commentaire




BIENVENUE

Java Village fait son bout de chemin depuis maintenant environ un an, et l'équipe en profite au passage, au nom des différents contributeurs, de vous remercier de vos visites mais aussi de vos participations. A bientôt en espérant vous voir venir nous lire de plus en plus souvent!

BLOG STATS

  • 74,614 hits

STATISTIQUES

Vous êtes à présent environ 1500 visiteurs par mois à venir visiter Java Village, ce qui représente presque le double de visiteurs par rapport aux résultats affichés il y a un trimestre. Merci à tous.

Livre du moment…

SCJP

a

Partenaires