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.
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:
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:
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.