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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[Images] Grosses images = Gros Lag ?


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut [Images] Grosses images = Gros Lag ?
    J'ai une soucis, dans le cadre de mon jeu j'affiche des images sur de grandes surfaces.

    Le problème c'est que si j'affiche une image en 1280*1024 la j'ai a peu près 1 à 2fps...

    J'ouvre mes images de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MPanel extends JPanel implements Runnable {
     
    	public static BufferedImage ifond;
     
    	public MPanel (MJeu jeu) {
     
    		try {
    			ifond = ImageIO.read(new File(GConstantes.I_FOND));
    		} catch (IOException e) {}
    	}
    et je les draw de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void paintComponent (Graphics g) {
     
    		super.paintComponent(g);
                    g.drawImage(ifond, 0, 0, null);
    }
    Y a t'il une meilleur façon de faire ?

  2. #2
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    je ne sais pas si c'est le cas, mais tu devrais peut-être les charger en mémoire d'abord et ensuite commencer à les afficher ...

    En revanche cette méthode te prendra énormément de mémoire .... alors c'et peut-être pas 1 bon conseil

    à toi de voir ..

  3. #3
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    L'image fait faisant 85Ko (PNG) ce n'est pas ça qui va faire peter la ram

    Par contre je pensais que le fait d'utiliser ImageIO.read et de les mettre en BufferedImage la mettait en mémoire sachant que je fait ça dans le constructeur.

    Apparement ça n'est pas le cas ce qui me fait poser une seconde question :
    Comment mettre une image en memoire ?

  4. #4
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    tu n'en met qu'une seule en mémoire, moi je te propose de toutes les charger.

  5. #5
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Le bout de code que j'ai mit n'est qu'un exemple, mais mes images osnt toutes chargées de cette manière et dessinées comme ça.

    Pour les objets de mon jeu (meteores etc...) chaque classe (Meteore, MPirate...) a un attribut static image qui est initialisé au constructeur si il est nul, et cette image est récuparable par une simple methode qui la retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class MGrandMeteore implements MHostile {
     
    	private int vx, vy;
    	private static Image image;
    	private static int damagePower;
    	private int health;
    	private MJeu jeu;
    	private Rectangle rectangle;
    	private static int dx, dy;
     
    	public MGrandMeteore(MJeu jeu, Point p, int vx, int vy) {
     
    		this.jeu=jeu;
    		this.vx = vx;
    		this.vy = vy;
    		if (image==null){
    			try {
    				image = ImageIO.read(new File(GConstantes.I_GRAND_METEORE));
    				dx = (int)image.getWidth(null)/2;
    				dy = (int)image.getHeight(null)/2;
    				damagePower = GConstantes.METEORE_DAMAGE_POWER_GRAND;
    			} catch (IOException e) {}
    		}
    		this.rectangle=new Rectangle((int)p.getX(), (int)p.getY(), 2*dx, 2*dy);
    		this.health = GConstantes.METEORE_HEALTH_GRAND;
     
    	}
    Peut on faire mieux ?

  6. #6
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par NeptuS
    tu n'en met qu'une seule en mémoire, moi je te propose de toutes les charger.
    Explique moi comment faire je suis tout disiposé à essayer

  7. #7
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    D'ailleurs quand j'y pense, je me demande :
    "Mais quelles instructions sont elles executées dans les temps de chargement des jeux ou des logiciels ?"

    Il faudrait peut être que je fasse une sorte de chargement avant mon jeu mais je ne voispas trop quoi y mettre. Je pourrait peut être charger les images en mémoire mais je ne vois pas comment mieux faire que ce que je fait actuelement.

    Quelqu'un aurait unen réponse ou une solution ?

  8. #8
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Citation Envoyé par RadicalBob
    je ne vois pas comment mieux faire que ce que je fait actuelement.

    Quelqu'un aurait unen réponse ou une solution ?
    La solution viendra peut-être quand tu nous dira comment tu fais : pour le moment on ne connais que ton MGrandMeteore et ton JPanel.

    à ce propos, on essaye dans 1 programme orienté objet (autant que possible) de séparer les parties graphique, données et traitements ; ainsi, ton JPanel qui implémente Runnable .... aïe ... ça fait mal par où ça passe ...

  9. #9
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Mon JPanel implements Runnable pour créer un petit thread qui s'occupe de lui faire un .repaint() à intervale régulier, rien de bien méchant...

    Comment je fais ?.. ça risque d'être long. Je vais essayer de faire court.

    Si on parle du jeu :

    J'ai une classe MJeu qui s'occupe de faire tourner le jeu (déplacements, collisions, etc.). Elle s'occupe donc de créer et gérer des objets de implementant l'interface MHostile qui contient 2,3 methodes comme getImage() ou getPoint().

    Ainsi, le panel, à chaque repaint, vas chercher une ArayList des MHostile du jeu par MJeu.getHostiles() et s'occupe de les dessiner selon leur image et position. Elle dessine aussi d'autre donnée détenues par MJeu comme le temps écoulé, la position du joueur etc..
    Mais elle doit aussi repaindre l'image de fond, une image de grande taille.


    Si on parle des images :


    Toutes les images dont mon programme sont chargées de la même façon à savoir dans le constructeur de l'objet qu'il represente (à savoir MGrandMeteore etc...) comme je l'ai mit quelques posts plus haut.
    Pour optimiser j'ai placé l'image en static puisqu'elle est la même pour tous les météores etc.. de plus pour accélerer la construction j'ai vérifier avant de la charger que celle est !=null, donc non déjà chargée.

    Reformulation de la / des question :
    Comment charger au mieux des images pour les utiliser dans un jeu ?
    Les grandes images (en dimension) sont elles lourdes à afficher ?
    Faut-il / Comment faire un chargement des images avant le lancement du jeu ? (splash screen ou autre)


    En esperant avoir été le plus clair possible.

  10. #10
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    haha !! mais j'ai pas capté !!! c'est Monsieur merdier !!!!



    Tout d'abord, pour l'image de fond, une astuce pour ne pas avoir à la retracer à chaque fois, c'est de la dessiner sur 1 Graphics que tu met de côté. tu jette l'image (c a d que tu ne la déclare qu'en variable locale) et tu garde le Graphics que tu duplique sur le Graphics courant quand tu veux redessiner l'image.

    idem pour l'image statique du MGrandMeteore : elle se transforme en 1 static Graphics sur lequel tu as tracé l'image au début.

    et enfin, pour répondre à la dernière des questions, ce que tu peux faire, c'est créer une classe "Constantes" dans laquelle tu ne met que des
    "public final static ..."
    dans tes classes, tu fait appel à tes variables de Contantes si tu en as besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Constantes.M_GD_METEORE_IMAGE
    ce qui te permet d'en avoir qu'une seule instance dans tout le programme

  11. #11
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut


    Je vois pas comment mieux t'expliquer désolé, à moins peut être de te filler tout mon code, mais y a aucune javadoc et quasi pas de commentaires...


    Par contre l'idée du graphics qu'un met de coté je trouva ça pas mal du tout, exactement le type de conseil que je recherche . Je vais essayer de mettre ça en place.

    En fait je n'ai qu'a
    -Changer l'attribut de chacun des objet de BufferedImage à Graphics
    -En plus de charger l'image dans le constructeur la dessiner dans ce graphics
    -changer mon interface MHostile pour que getImage() retourne un Graphics
    -A la place de dessiner des images dans mon JPanel, je dessine des Graphics.

    J'ai bon ?

    Autre petite question avant que je me mette à charcutter mon code, est 'il possible de dessiner un Graphics à un point donné ? (comme la position du MHostile par exemple) ?

  12. #12
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    Citation Envoyé par NeptuS
    haha !! mais j'ai pas capté !!! c'est Monsieur merdier !!!!
    j'entendais par là que je n'avais pas compris que c'était toi.

  13. #13
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par NeptuS
    j'entendais par là que je n'avais pas compris que c'était toi.

    Comment ça ?

    Edit - Ok, et moi je viens de comprendre que tu viens de comprendre que c'etait aussi moi dans un post y a quelque heure... on s'en sort

    Edit 2 - Oula, j'ai édité et pourant ça a recréer le post. Du coup double post..
    Soi c'est moi qui suis un gros boulet auquel cas je m'auto- ce qui être très possible vu mon taux de sommeil actuel

  14. #14
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par NeptuS
    et enfin, pour répondre à la dernière des questions, ce que tu peux faire, c'est créer une classe "Constantes" dans laquelle tu ne met que des
    "public final static ..."
    dans tes classes, tu fait appel à tes variables de Contantes si tu en as besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Constantes.M_GD_METEORE_IMAGE
    ce qui te permet d'en avoir qu'une seule instance dans tout le programme
    C'est exactement ce qui est fait dans la classe abstract GConstantes qui regroupe toutes mes constantes (à peu près 150). Le type de la constante pour chaque image est un String qui est le chemin d'accès vers l'image. Du coup pour charger l'image ça donne ça ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image = ImageIO.read(new File(GConstantes.I_GRAND_METEORE));
    Je pourrait passer le type à Image ou Graphics mais comment à ce moment là les charger en mémoire, il faudrait passer pas une sorte de classe intermediare qui s'occuperais de prendre toutes les images repertoriées par GConstante, les charger (toujours pas ImageIO). Et il ne me resterais plus qu'an lancer tout ça au démarage du jeu ?

    Est ce que ça serait vraiment plus efficace ? par ce que finalement je ne charge qu'une seule fois l'image pour chque type de MHostile (6 en fait) car je verifie avant de la charger que celle-ci est null cf > Ici

  15. #15
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Après compulsation des methodes proposées par Graphics (via l'aide à la saisie de Eclipse, je l'avoue) je ne vois pas comment plaquer un Graphics sur un autre

    Un ptit bout de code pour ça ?

    Edit - J'ai aussi pris le temps de compulser la javadoc et pas mieux.
    Edit 2 - J'ai trouvé paint(Graphics) dans la javadoc de Component, ça devrait être bon pour le fond, qui ne bouge pas. Mais par contre pour une image qui bouge, comme celle des meteores...

  16. #16
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    RadicalBob > Essaye de changer le mode de rendu utilisé par Java en désactivant DirectDraw (flag -Dsun.java2d.noddraw=true pour la JVM), en activant Direct3D (flag -Dsun.java2d.d3d=true) ou OpenGL (-Dsun.java2d.opengl=true). Tu peux aussi essayer d'utiliser des VolatileImage. Sinon assure-toi d'utiliser Java 1.5 pour bénéficier des managed images.

    Plus d'infos :

    http://weblogs.java.net/blog/chet/ar...tbuffered.html
    http://weblogs.java.net/blog/chet/ar...o_just_an.html
    http://weblogs.java.net/blog/chet/ar...leimage_q.html
    http://weblogs.java.net/blog/chet/ar...leimage_n.html
    http://weblogs.java.net/blog/chet/ar...edimage_a.html
    http://weblogs.java.net/blog/chet/ar...image_a_1.html

    Conserver des Graphics plutôt que des images ne changera pas grand chose à moins d'utiliser des stratégies de double-buffering (cf la FAQ) qui ne sont utiles qu'en plein écran avec Swing.

    La meilleure optimisation que tu peux faire est de ne pas appeler repaint() mais repaint(x, y, w, h) pour ne redessiner que les parties de l'écran qui ont changées. Tu devrais ainsi gagner beaucoup beaucoup de temps pour le dessin des images.

    Enfin, assure-toi que ton image est *compatible* avec l'écran. Tu gagneras beaucoup en performances. Voici une classe qui contient des méthodes pour faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsEnvironment;
    import java.awt.RenderingHints;
    import java.awt.Transparency;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.awt.image.ComponentSampleModel;
    import java.awt.image.DataBuffer;
    import java.awt.image.DataBufferByte;
    import java.awt.image.DataBufferInt;
    import java.awt.image.SampleModel;
    import java.awt.image.SinglePixelPackedSampleModel;
    import java.awt.image.WritableRaster;
    import java.io.IOException;
    import java.net.URL;
    import javax.imageio.ImageIO;
     
    public class GraphicsUtil {
        private static GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
     
        private GraphicsUtil() {
        }
     
        public static BufferedImage createCompatibleImage(int width, int height) {
            return configuration.createCompatibleImage(width, height);
        }
     
        public static BufferedImage createTranslucentCompatibleImage(int width, int height) {
            return configuration.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
        }
     
        public static BufferedImage loadCompatibleImage(URL resource) throws IOException {
            BufferedImage image = ImageIO.read(resource);
            return toCompatibleImage(image);
        }
     
        public static BufferedImage toCompatibleImage(BufferedImage image) {
            BufferedImage compatibleImage = configuration.createCompatibleImage(image.getWidth(),
                    image.getHeight(), Transparency.TRANSLUCENT);
            Graphics g = compatibleImage.getGraphics();
            g.drawImage(image, 0, 0, null);
            g.dispose();
            return compatibleImage;
        }
     
        public static BufferedImage createThumbnail(BufferedImage image, int requestedThumbSize) {
            float ratio = (float) image.getWidth() / (float) image.getHeight();
            int width = image.getWidth();
            BufferedImage thumb = image;
     
            do {
                width /= 2;
                if (width < requestedThumbSize) {
                    width = requestedThumbSize;
                }
     
                BufferedImage temp = new BufferedImage(width, (int) (width / ratio), BufferedImage.TYPE_INT_ARGB);
                Graphics2D g2 = temp.createGraphics();
                g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                                    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g2.drawImage(thumb, 0, 0, temp.getWidth(), temp.getHeight(), null);
                g2.dispose();
     
                thumb = temp;
            } while (width != requestedThumbSize);
     
            return thumb;
        }
     
        public static BufferedImage createThumbnail(BufferedImage image, int newWidth, int newHeight) {
            int width = image.getWidth();
            int height = image.getHeight();
            BufferedImage thumb = image;
     
            do {
                if (width > newWidth) {
                    width /= 2;
                    if (width < newWidth) {
                        width = newWidth;
                    }
                }
     
                if (height > newHeight) {
                    height /= 2;
                    if (height < newHeight) {
                        height = newHeight;
                    }
                }
     
                BufferedImage temp = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
                Graphics2D g2 = temp.createGraphics();
                g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                                    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g2.drawImage(thumb, 0, 0, temp.getWidth(), temp.getHeight(), null);
                g2.dispose();
     
                thumb = temp;
            } while (width != newWidth || height != newHeight);
     
            return thumb;
        }
    }

  17. #17
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    les paramètres de la JVM et moi ... je devrais ptètre m'y mettre 1 jour

  18. #18
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    J'ai trouvé comment faire un Graphics à partir d'un image, mais reste à trouver comment le dessiner.

    A part ça j'ai trouvé un truc qui peut être une piste à suivre, si quelqu'un connait > Component.prepareImage(Image image, ImageObserver observer) > Prepares an image for rendering on this component.

    Je vais essayer ça.

  19. #19
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Gfx
    ...plein de trucs
    Merci pour ton aide !

    cf repaint(x, y, width, height) > le problème c'est que ça bouge de façon très anarchique sur tout l'écran donc impossible...

    cf configuration de la JVM > ce porgramme n'est pas pour moi, c'est un projet imposé par mon école (IUT informatique de Vannes, 1ère année) et ça m'etonnerait que ça soit bien vu que j'aille voir le correcteur pour lui demander de configurer sa JVM...

    cf Image compatible et la classe GRaphicsUtil > Alors là je dis : "Je t'aime Gfx".
    Je n'ai passé que l'image de fond, si grosse soit elle, à la construction en passant de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifond = ImageIO.read(new File(GConstantes.I_FOND));
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifond = GraphicsUtil.toCompatibleImage(ImageIO.read(new File(GConstantes.I_FOND)));
    et je suis passé de 3 FPS à 35.

    Ne reste plus qu'a changer tous les chargement d'image de cette facon.

  20. #20
    Nouveau membre du Club Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Idée sur la cause de l'incompatibilité :

    Microsoft Paint.

    Hé oui ! Ce si simple logiciel que j'aimais pourtant utiliser pour de rapides retouche est une des causes direct de mon lag..

    Après un petit test avec differentes images (toutes en PNG) , il n'y que les images que j'avais rapidement agrandie avec paint qui faisaient lagger le tout. Les autres issues de Photoshop n'ont posée aucun soucis.

    C'est bon à noter.


    En tout cas : [Résolu] tag set : on

    Merci à ceux qui ont apporté des solutions tout comme ceux qui se sont casser le crâne sans pouvoir m'en apporter

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Grosses images dans un composant bien adapté
    Par BakaOnigiri dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 29/04/2009, 01h25
  2. [HTML] Afficher une grosse image avec zoom
    Par Amadou31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 08/11/2007, 11h52
  3. [Configuration] Problème d'upload image grosse taille
    Par chicho dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 19/09/2007, 17h31
  4. Compression de grosses images
    Par vinzzzz dans le forum Imagerie
    Réponses: 3
    Dernier message: 24/04/2007, 14h36
  5. 1 image + 1 image = 1 image
    Par dleu dans le forum Delphi
    Réponses: 2
    Dernier message: 24/05/2006, 20h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo