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 :

BufferedImage avec compression


Sujet :

AWT/Swing Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut BufferedImage avec compression
    Bonjour,

    j'ai une application qui, pour des raisons de performances (IOs) a besoin de précharger en mémoire pas mal d'images. Sans préchargement, l'animation "laggue". Le stock d'images concerné, une fois chargé sous forme de bufferedimages, occupe environ 2.5G en java, et j'essaie de réduire. (en plus, il faudrait que je charge un deuxième stock de la même taille, mais c'est moins important).

    Si j'étais sur une appli opengl, j'utiliserais des textures compressées (DXT1, etc). Je cherche à avoir quelque chose de similaire avec les bufferedimage, et plus précisément derrière, avec batik

    Avant de me lancer dans les ajustements spécifiques à batik, je voudrais savoir si il est possible, en java, d'avoir une BufferedImage compressée, par exemple en RLE, ce qui conviendrais très bien à mon style d'image ayant de grands à plats.

    Bref, j'ai environ 200M de pngs à faire tenir en BufferedImages

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    J'imagine que tu n'as pas besoin de toutes ces images en même temps.
    As-tu pensé à un système "prédictif" afin de déterminer l'ensemble des images qui seront utilisées dans le futur immédiat ?
    Exemple d'un déroulement naïf :
    1. init du programme, préchargement d'un premier lot d'images, celles qui sont toujours utilisées au début,
    2. dans le déroulement du programme, tu supprimes toutes les images qui ne seront plus utilisées dans l'immédiat,
    3. tu ajoutes toutes les images qui seront utilisées dans un futur proche.

    Le principe est de deviner les images qui seront utilisées assez longtemps à l'avance pour avoir le temps de les charger avant de les utiliser, sans le faire trop longtemps à l'avance pour ne pas remplir la RAM.
    Selon le programme que tu fais, le système prédictif peut être absolu : tu es sûr et certain des images à supprimer du lot et des images à ajouter, ou alors statistique : à partir de X% de chance d'utilisation, tu charges.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    oui mais non

    en gros c'est l'image de fond d'un programme d'animation. Donc quand on clique sur "play", je dois pouvoir soutenir raisonnablement 25 images par secondes.

    Or pour le moment, lire depuis le disque vers une BufferedImage bouffe 1 seconde.

    Donc il me faudrait 25 cores pour arriver à suivre la cadence


    Je voudrais vraiment arriver à garder en mémoire quelque chose de complet et réactif.

    PS: et après vérification, c'est bien le décodage CPU du png qui bouffe et pas les IO: j'ai caché les byte[] que chaque fichiers en mémoire pour passer des ByteArrayInputstream au décodeur sans gain.

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ton programme serait une sorte de viewer d'images qui les affiche les unes après les autres à la cadence d'une vidéo ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Non, ce programme permet de dessiner des animations vectorielles, le png sert de guide et fera partie de l'animation finale. Le soucis, c'est quand on veux faire une preview de l'animation, il faut un débit raisonnable d'image (10 à 20 par seconde). Et j'ai un problème, si je ne précache pas en mémoire les images de fond, le decodage png ne suit pas le débit requis

    Donc, oui, grosso modo, une partie du programme se comporte comme un viewer faisant défiler les images les unes après les autres.

Discussions similaires

  1. [PIL] Sauvegarge au format TIF avec compression LZW --> Syntaxe?
    Par nihilulter dans le forum Général Python
    Réponses: 2
    Dernier message: 28/01/2010, 08h20
  2. Export avec compress mais plusieurs extent à l'import
    Par Korfandar dans le forum Administration
    Réponses: 1
    Dernier message: 12/05/2008, 18h30
  3. utiliser un tunnel ssh avec compression nx
    Par bolboln01 dans le forum Réseau
    Réponses: 0
    Dernier message: 21/02/2008, 15h32
  4. Compresser un dossier avec Compress::Zlib
    Par mobscene dans le forum Modules
    Réponses: 1
    Dernier message: 17/11/2006, 21h13
  5. Ligne dans une BufferedImage avec couleur inverse
    Par bourbon dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 25/05/2006, 01h31

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