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

Langage Java Discussion :

enregistrer plusieur BufferedImages


Sujet :

Langage Java

  1. #1
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut enregistrer plusieur BufferedImages
    salut.
    je doit enregistrer des objets BufferedImage dans un objet Vector .
    donc combien d'image peuvent être insérer pour ne pas arriver a surcharger la mémoire .
    je sais que la taille max d'un vecteur dépend de MaxInt en java mais je suppose qu'on risque de surcharger la mémoire dans mon cas pour une valeur taille avec taille <<<<<<<<<< MaxInt.

    je suppose que quelqu'un de vous me proposeait d'enregistrer mes images dans un fichier objet et si c'etait le cas , alors est ce que je doit créer une classe qui hérite de BufferedImage pour faire implements Serializable ?

    je cherche toujours la solution optimale alors merci pour vos propositions

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    mais ou sont les expert ?

    d'accord ,en attendant qu'ils arrivent ,j'ai enregistrer mes images dans des fichiers ,et sa marche bien .
    pour le moment ,j'ai un fichier par image ,et bien sur c'est un gaspillage ,donc ,peut-on enregistrer tous mes images dans un seul fichier ?

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    pour sauver des images, le pus "propre" c'est encore d'utiliser les api dans imageio et stocker ca sour forme de png ou de jpeg. Serializer un bufferedImage n'est pas un bon plan, tu va occuper plus de place sur le disque que nécessaire, sans compter que rien ne garantit que la serialization n'aura pas de soucis.

    Pour ce qui est de stocker les bufferedImage en mémoire, ben assez logiquement ta limite est celle de la mémoire, occupée principalement par le bufferedimage. La taille des bufferedimage étant un peu supérieure à largeurxhauteurxtaille en mémoire d'un pixel

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    ben ,voila enfin un expert active qui m'enrichi avec son expérience .merci tchize

    Citation Envoyé par tchize_ Voir le message
    pour sauver des images, le pus "propre" c'est encore d'utiliser les api dans imageio et stocker ca sour forme de png ou de jpeg.
    je suis tout a fait d'accord et je suppose que tu te souvient de mon interpolation de mouvement que je veut faire , donc si j'adopte ta solution , je dois enregistrer un fichier image a chaque réveille de mon thread ,et cela va influer sur le déroulement de l'animation à l'écran . c'est pourquoi je trouve que le fait d'enregistrer un objet pourra être plus rapide ( plus synchrone avec l'animation) que générer un fichier image .

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    je pense plutot que écrire un fichier png sera plus performant que sérializer un objet. La serialisation d'objets complexes est loin d'être une chose très performante. Elle entraine beaucoup de reflexion

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    J'arrive un peu tard sur cette discussion, mais je cherchais autres choses.

    Pour compléter la réponse de tchize_, s'il n'est pas nécessaire d'avoir tous les éléments en mémoire, il faut tenter au maximum de les mettre sur le disque quand on ne risque pas d'en avoir besoin (via un File#createTempFile et un ImageIO par exemple).
    En effet, les BufferedImage peuvent vite plomber la mémoire.

    Par exemple pour un système d'historique de modification (si cela peut s'appliquer pour tout cas), en général, plus l'image est ajoutée récemment, plus la probabilité qu'on ait à s'en servir est importante (cela correspond à une pile). Cela permet par exemple de faire un système de cache qui enregistre systématiquement les images trop vieilles sur le disque.

    Quand j'ai mis en place ce système sur mon logiciel, je suis passé de 400mo de mémoire utilisé à 100mo.

  7. #7
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Il existe aussi les SoftReference qui sont bien pratiques pour la création d'un cache, ça permet d'être plus optimal en laissant la JVM décider de quand il est nécessaire de supprimer les objets en mémoire pour gagner de la place.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Par défaut
    J'ai un peu le même problème. Je travaille sur un programme qui peut enregister l'écran. Il prend des captures d'écran très rapidement. Lorsque je "store" mes BufferedImages dans un vector, une ArrayList ou une BufferedImage[] j'obtiens l'erreur java heap space après a peine quelques images.

    L'autre problème est que quand je décide de générer les images a chaque fois quelle est prise, ça relentis tellement le programme que le 30 FPS descend à 3 ou 4 FPS. Et lors de la génération du vidéo, il manque des bout.

    Des solutions pour ça?

    (J'ai tenté de générer les ImageIO.write avec un synchronized void mais ça ne marche toujours pas)

  9. #9
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    bonne année tout le monde.
    c'est grâce a millie que ce post est réouvert ...

    Citation Envoyé par Simonake Voir le message
    J'ai un peu le même problème. Je travaille sur un programme qui peut enregister l'écran. Il prend des captures d'écran très rapidement. Lorsque je "store" mes BufferedImages dans un vector, une ArrayList ou une BufferedImage[] j'obtiens l'erreur java heap space après a peine quelques images.

    pourquoi ne pas enregistrer tes images sur le disque dur dans une répertoire après tu essaye de récupérer tes images.

    Citation Envoyé par Simonake Voir le message
    L'autre problème est que quand je décide de générer les images a chaque fois quelle est prise, ça relentis tellement le programme que le 30 FPS descend à 3 ou 4 FPS. Et lors de la génération du vidéo, il manque des bout.
    tu peux lancer un thread s'occupant de l'écriture d'une image sur le disque dur pour ne pas ralentir l'exécution de ton programme principal et en plus ,tu ne risqueras pas de perdre quelques images.

  10. #10
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par Simonake Voir le message
    Et lors de la génération du vidéo, il manque des bout.
    tu as essayé le code que je t'ai livrer pour construire ta vidéo ?

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Par défaut
    Merci pour tes réponses et bonne année 2010.

    Je m'était peut-être mal expliqué. C'est le procédé que j'utilise, je mets les images sur le disque dûr et puis après j'utilise le vector avec le nom de mes fichiers pour faire le video. Et ça marche bien.

    Je vais tenter de le faire avec les Threads et je reviens après.

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/10/2007, 11h03
  2. Comment ne pas enregistrer plusieurs fois une touche ?
    Par Jordinateur dans le forum SDL
    Réponses: 33
    Dernier message: 05/10/2007, 22h44
  3. Réponses: 2
    Dernier message: 22/09/2007, 16h37
  4. Réponses: 9
    Dernier message: 25/07/2007, 22h24
  5. [Dates] Enregistrer plusieurs dates
    Par bfabrice dans le forum Langage
    Réponses: 7
    Dernier message: 17/05/2006, 11h57

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