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 :

Récupérer une image scannée dans JAI


Sujet :

Graphisme Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Par défaut Récupérer une image scannée dans JAI
    Bonjour,

    Mon application affiche à l'écran des images scannées ; j'utilise le framework Morena pour traiter cette partie. J'aimerai rajouter des fonctions de traitement d'image et j'ai entendu parler de JAI, qui semble convenir à ce dont j'ai besoin. Mon problème est que je ne sais pas comment lier l'image scannée avec JAI pour pouvoir coder les fonctionnalités. Votre aide est la bienvenue. Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Par défaut
    Salut,

    Pour charger une image pour commencer à jouer avec, tu passes par la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JAI.create("fileload",...)
    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlanarImage im = JAI.create("fileload", "C:\\lena.bmp")
    Dans ce cas tu charges lena.bmp qui se trouve sur C: et tu décides de jouer avec en tant que PlanarImage (! Il n'y a pas que des PlanarImage dans JAI, tout dépend un peu de ce que tu veux faire)

    Ca c'est la plus "basique" si tu veux mais bon, il y'en a plein avec des signatures plus étoffées, je te conseille de regarder les liens que je t'ai envoyé tout à l'heure par mail.

    bon boulot,

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Par défaut
    2/3 petites astuces en plus :

    Quand tu feras tes modifications, tu les passeras à la méthode que tu utilises sous forme d'objet ParameterBlock (sorte de foure-tout).

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ParameterBlock pb = new ParameterBlock();
        pb.addSource(im);
        pb.add(kernel); //un kernel, voir classe KernelJAI
        im = JAI.create("dilate",pb,null); //opération de dilatation
    pour enregistrer ton image modifiée, rien de plus simple...ce n'est plus"fileload" qu'on emploie, mais "filestore" :
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JAI.create("filestore", im1,"C:\\out\\im1.bmp"); //"filestore", une image JAI, la destination
    J'espère que ca te permettra d'avancer plus vite...

  4. #4
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Par défaut Problème de lenteur avec JAI
    Bonjour pssst,

    Merci beaucoup pour tes réponses et ton mail.

    J'ai un peu avancé. En fait pour JAI je ne pouvais pas travailler à partir d'images stockées sur mon PC car je travaille à partir d'images scannées via l'applet. Dès que l'utilisateur scanne un document il en a l'aperçu dans l'applet, et peut ensuite modifier l'image (par une rotation par exemple).

    J'ai utilisé les BufferedImage pour pouvoir travailler les documents scannées avec JAI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Image image = Toolkit.getDefaultToolkit().createImage(morenaImage);
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
    bufferedImage.createGraphics().drawImage(image, 0, 0, null);
    PlanarImage planarImage = PlanarImage.wrapRenderedImage(bufferedImage);
     
    return planarImage;
    J'ai rajouté à mon applet 2 fonctionnalités de traitement d'image : rotation et inversion. Mais maintenant mon problème est que le résultat met plusieurs secondes à s'afficher lorsque j'exécute une de ces opérations ; est-ce normal? Y a t-il une solution pour avoir quelque chose de plus rapide?

    Voici comment je fais la rotation et l'inversion:
    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
     
    /**
         * Execute le traitement d'image->Invert
         * @return
         */
        protected BufferedImage doViewControlInvert()
        {
            PlanarImage input = this.book.get(this.bookIndex); // image en entrée
            PlanarImage output = JAI.create("invert", input); // image en sortie
            this.book.set(this.bookIndex, output); // remplacement de l'ancienne numérisation par la nouvelle après inversion
     
            return output.getAsBufferedImage(); // renvoi de la numérisation après inversion pour l'afficher à l'écran
        }
     
        /**
         * Execute le traitement d'image->Rotate
         * @return
         */
        protected BufferedImage doViewControlRotate()
        {
            float angle = (float)Math.toRadians(this.angleRotation); // angle de rotation
            float centerX = this.book.get(this.bookIndex).getWidth()/2f; // abscisse du centre
            float centerY = this.book.get(this.bookIndex).getHeight()/2f; // ordonnée du centre
            ParameterBlock param = new ParameterBlock();
            param.addSource(this.book.get(this.bookIndex));
            param.add(centerX);
            param.add(centerY);
            param.add(angle);
            param.add(new InterpolationBilinear());
            PlanarImage scaledImage = JAI.create("rotate", param); // rotation
     
            this.book.set(this.bookIndex, scaledImage); // remplacement de l'ancienne numérisation par la nouvelle après rotation
     
            return scaledImage.getAsBufferedImage(); // renvoi de la numérisation après rotation pour l'afficher à l'écran
        }
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/10/2012, 17h28
  2. [Débutant] Récupérer une image présente dans les ressources du projet?
    Par garheb dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/05/2012, 15h05
  3. [Lazarus] Récupérer une image contenue dans un fichier XML
    Par Tux74 dans le forum Lazarus
    Réponses: 1
    Dernier message: 13/10/2011, 23h14
  4. Récupérer une image OpenCV dans Allegro
    Par karistouf dans le forum OpenCV
    Réponses: 0
    Dernier message: 04/12/2008, 14h45
  5. Réponses: 5
    Dernier message: 03/12/2008, 12h12

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