Bonjour,

Voilà mon problème :
Dans le cadre d'un module de scan (acquisition de documents par un scanner), je souhaite afficher une série de vignettes (aperçus d'image) dans un panel... Pour ce faire, je redimensionne l'image de base (acquise en bufferedImage) grace à la méthode drawimage de Graphics2D.
Jusqu'ici, tout se passe bien avec tous les types d'images (jpeg, png,...), sauf les images TIFF (simple ou multi-page, peu importe, le problème est le même) !

Voici le cheminement qui amène l'erreur :

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
/**
* Méthode de création de la vignette
*/
private void initVignette(File file) {
 
		BufferedImage image = null;
		try {
			if (FileUtils.getExtension(file).equalsIgnoreCase("tif") || FileUtils.getExtension(file).equalsIgnoreCase("tiff")) {
				// -- Cas d'un fichier TIFF
				image = ScanUtils.readTIFF(file, m_pageNumber - 1);
			} else {
				image = ImageIO.read(file);
			}
 
	        final int imgWidth = image.getWidth();
	        final int imgHeight = image.getHeight();
	        if (imgWidth == -1 || imgHeight == -1) {
	            // -- l'image n'a pas fini de charger
	            return;
	        }
 
			// -- Format Portrait ou paysage
			if (imgWidth < imgHeight) {
				int tmp = m_defaultWidth;
				setDefaultWidth(m_defaultHeight);
				setDefaultHeight(tmp);
			}
 
			m_vignette = new BufferedImage(m_defaultWidth, m_defaultHeight + 15, image.getType());
			Graphics2D g2 = m_vignette.createGraphics();
			g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
					RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
			g2.setRenderingHint(RenderingHints.KEY_RENDERING,
					RenderingHints.VALUE_RENDER_SPEED);
			g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
					RenderingHints.VALUE_COLOR_RENDER_SPEED);
			g2.setRenderingHint(RenderingHints.KEY_DITHERING,
					RenderingHints.VALUE_DITHER_DISABLE);
 			// -- Redimensionnement
			g2.drawImage(image, 0, 0, m_defaultWidth, m_defaultHeight, null);
			setVignetteText(g2);
			g2.dispose();
		} catch (IOException e) {
			s_logger.fatal(e.getMessage(), e);
		}
 
/**
* Méthode de ScanUtils pour lire une image à partir d'un fichier TIFF et de son numéro de page
*/
public static BufferedImage readTIFF(File file, int numPage) {
 
		BufferedImage result = null;
		try {
			FileSeekableStream stream = new FileSeekableStream(file);
			TIFFDecodeParam paramd = new TIFFDecodeParam();
			ImageDecoder decoder = ImageCodec.createImageDecoder("TIFF", stream, paramd);
			RenderedImageAdapter ria = new RenderedImageAdapter(decoder.decodeAsRenderedImage(numPage));
			result = ria.getAsBufferedImage();
		} catch (IOException e) {
			//TODO : MC : I18n
			s_logger.error(e.getMessage(), e);
		}
		return result;
	}
m_defaultWidth et m_defaultHeight sont des int respectivement fixés à 160 et 120.
L'erreur se produit systématiquement à la ligne (de la méthode setVignette()) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
g2.drawImage(image, 0, 0, m_defaultWidth, m_defaultHeight, null);
Avec un Java Heap Space...

Quelqu'un aurait-il une idée lumineuse ?