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

Graphisme Java Discussion :

compresser une bufferedImage


Sujet :

Graphisme Java

  1. #1
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut compresser une bufferedImage
    Bonjour à tous,

    voici mon problème : le but est d'envoyer une capture d'image via UDP alors pour cela je dois la compresser < 65000 octets

    donc mon but est de compresser une bufferedImage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //nb: j'ai deja utiliser 
     
            JPEGEncodeParam param =encoder.getDefaultJPEGEncodeParam(m_bi1)
     
            param.setQuality(quality, false);
     
     
    // mais c pas suffisant et le resultat est tres mediocre
    merci d'avance.

    mehdi

  2. #2
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    En regardant du coté de java.io et java.nio, tu verras que tu peux communiquer via socket avec des flux compressés (GZIPOutputStream), ça pourrait ventuellement te convenir

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    C'est quoi comme type d'image?
    Car JPEG est très mauvais sur certains types d'images (quand il y a des contourns nets, comme par exemple une capture d'écran)...

  4. #4
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    exact c'est une capture d'écran que je la convertit en tableau de byte[] et je l'envoie via socket UDP

  5. #5
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Citation Envoyé par leyee
    En regardant du coté de java.io et java.nio, tu verras que tu peux communiquer via socket avec des flux compressés (GZIPOutputStream), ça pourrait ventuellement te convenir

    bon moi je travaille avec socket UDP donc avec tableau de byte

    ??est ce que je peux convertir le flux compressé en un tableau de byte???

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par mehdib2
    exact c'est une capture d'écran que je la convertit en tableau de byte[] et je l'envoie via socket UDP
    OK, donc au lieu de la compresser en JPEG, compresse en PNG, ça compressera bien et il n'y aura pas de perte de qualité (lossless)...

  7. #7
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Citation Envoyé par ®om
    OK, donc au lieu de la compresser en JPEG, compresse en PNG, ça compressera bien et il n'y aura pas de perte de qualité (lossless)...
    meme avec le format PNG le bufferedImage est trop volumineux

    y a pas de methode pour compresser une bufferedImage?

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    NOrmal une BufferedImage est non compressée afin que l'on puisse la manipuler. Ce n'est pas la BufferedImage que tu dois envoyer dans ton réseau mais el fichier correspondant à ton image compressée en PNG ou en JPEG.

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    yep, Image => ImageIO + ByteArrayOutputStream => byte[] => Socket => byte[] => ImageIO +ByteArrayInputStream => Image.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Citation Envoyé par sinok
    NOrmal une BufferedImage est non compressée afin que l'on puisse la manipuler. Ce n'est pas la BufferedImage que tu dois envoyer dans ton réseau mais el fichier correspondant à ton image compressée en PNG ou en JPEG.
    Bonjour
    je fais des capture d'écrans tt les 10 nano/s je ne stocke pas sur le disque tt ce fais en mémoire j'envoie directement le bufferedImage après l'avoir transformer en byte[].
    moi je veux une méthode qui compresse ou change de résolution l'essentiel c d'avoir le tableau final < 65000 octets

    si vous avez d'autre proposition n'hesiter pas

  11. #11
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu peux parfaitement avoir un Fichier en mémoire et non sur le disque...

    Le but est justement de' ne pas envoyer une BufferedImage car celle ci ne peut être compressée.
    Par contre si tu crées un fichier png en mémoire (cf ByteARaayOutputStream comme le propose Bouye) il prendra largement moins de place que ta BufferedImage...

  12. #12
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Citation Envoyé par sinok
    Tu peux parfaitement avoir un Fichier en mémoire et non sur le disque...

    Le but est justement de' ne pas envoyer une BufferedImage car celle ci ne peut être compressée.
    Par contre si tu crées un fichier png en mémoire (cf ByteARaayOutputStream comme le propose Bouye) il prendra largement moins de place que ta BufferedImage...
    slt

    bon tu peux pas envoyer une BufferedImage il faus passer par ByteARaayOutputStream et ImageIO


    voici ma methode pour transformer bufferedImage en byte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
             //o=capture d'ecran
             BufferedImage image = (BufferedImage)o;
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             try{
    	ImageIO.write(image, "png", baos);//ou jpg sa change rien
             }catch (IOException e) {
    	throw new IllegalStateException(e.toString());
             }
             byte[] b = baos.toByteArray();
     
             /*le b.lenght est <65000 si je capture une portion de l'cran sinon avec une capture de tt l'ecran et avec une tres grande resolution 65000<b.lenght<200000*/
             //send(b); envoie du tableau si b.lenght<65000
    bon moi je connais pas trop en traitement d'image mais je pense si l'image capté je la redimensionne mais pas trop ou je la rend un peu flou je pourrais gagner en taille


    qu'est ce que vous en pensez?
    et qu'elle sont les méthodes qui permettent sa

    merci

Discussions similaires

  1. Ligne dans une BufferedImage avec couleur inverse
    Par bourbon dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 25/05/2006, 01h31
  2. Un moyen pour compresser une string ?
    Par Bruno13 dans le forum Langage
    Réponses: 9
    Dernier message: 11/11/2005, 05h05
  3. compresser une base de donnée
    Par mic79 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2005, 11h13
  4. Compresser une base
    Par cdlr27 dans le forum Access
    Réponses: 8
    Dernier message: 15/03/2004, 14h15
  5. [ADO] [C#] [VB.NET] Compresser une BD Access par .NET
    Par olivierx dans le forum Accès aux données
    Réponses: 4
    Dernier message: 09/03/2004, 09h42

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