Forum Clubic

Java - Graphics.DrawImage avec paramètre négatif

Salut,

Je coince sur la compréhension d’un bout de code en Java :


    private BufferedImage unwrapImageByColumns(BufferedImage bufferedimage)
    {
        int i = bufferedimage.getWidth() / 16;
        BufferedImage bufferedimage1 = new BufferedImage(16, bufferedimage.getHeight() * i, 2);
        Graphics g = bufferedimage1.getGraphics();
        for(int j = 0; j < i; j++)
        {
            g.drawImage(bufferedimage, -j * 16, j * bufferedimage.getHeight(), null);
        }

        g.dispose();
        return bufferedimage1;
    }

Pour être précis, je vois ce que ce code est censé faire (découper une image par bandelettes et mettre toutes ces bandelettes les unes sur les autres dans une nouvelle image), mais je ne comprends pas le “-j * 16” en paramètre d’appel de la fonction drawImage. Je n’ai trouvé aucune documentation expliquant comment cette fonction se comportait avec un paramètre négatif. Seriez-vous capable de m’éclairer ?

Merci d’avance :slight_smile:
Edité le 27/02/2011 à 12:12

Il manque un finally pour disposer du graphique !

Pour la question, rien n’empêche des coordonnées d’être négatives. Je pense qu’il sait gérer (dans ce cas, imagines que tu fais une translation de bufferedimage.getWidth() avant).

Par contre, c’est pas un truc qui transforme une image en “ligne” pour un truc en “colonne” ? Hors la représentation américaine en ligne est habituellement à l’envers (ie: axe des y vers le bas) alors qu’en colonne c’est vers la droite.

A voir :slight_smile:
Edité le 27/02/2011 à 20:06

J’ai compris ! Illumination du samedi matin :smiley:

L’image de base des composée de i colonnes de 16 pixels de large. Le code souhaite découper tout ça pour en faire une seule grande colonne de 16 pixels de large.

Première itération, il dessine l’image originale dans la nouvelle image avec x = 0 et y = 0 : la première colonne se trouve dans la nouvelle image, le reste en dehors (ça dépasse).

Deuxième itération, il dessine l’image originale dans la nouvelle image avec x = -16 = y = ‘hauteur de la colonne’ : la première colonne se retrouve hors de l’image à gauche, la deuxième colonne se trouve dans la nouvelle image, le reste en dehors (ça dépasse toujours).

Et ainsi de suite ! A chaque itération, on déplace l’image de 16 pixels vers la gauche pour que ce soit une colonne différente qui se retrouve “dans le champs”. Vraiment tordu comme algo :smiley:

Oui, et le code dont cette fonction est tirée est tout aussi moche et mal écrit :confused:

Ah ben ça :slight_smile: c’est du code que tu modifie pour le boulot ou c’est perso ?

Au détour d’une conversation, je me suis lancé le défi stupide et inutile de porter Minecraft en .NET :smiley:

Tu parles de ce jeu ? www.minecraft.net…
IL est pas trop OpenSource mais 'jdirai rien :slight_smile:

Pas du tout opensource même, mais le java se décompile plutôt bien. Ça reste juste un défi personnel de toutes manières, c’est pas comme si j’allais ensuite le publier :slight_smile: