ciao a tutti, sto realizzando un lettore di immagini tiff (Multilevello) in java, per ora vorrei iniziare ad implementare una funzione di zoom leggendo i vari livelli della foto solo che non riesco a capire perchè non me lo fa...
Se qualcuno fosse così gentile da aiutarmi!!!
Posto il codice
codice:
import java.awt.Button;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.renderable.RenderableImage;
import java.io.File;
import java.io.IOException;
import java.awt.Frame;
import java.awt.image.RenderedImage;
import javax.media.jai.widget.ScrollingImagePanel;
import javax.media.jai.NullOpImage;
import javax.media.jai.OpImage;
import com.sun.media.jai.codec.SeekableStream;
import com.sun.media.jai.codec.FileSeekableStream;
import com.sun.media.jai.codec.TIFFDecodeParam;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageCodec;
public class MultiPageRead extends Frame {
Panel pnlGenerale;
ScrollingImagePanel panel;
int imageToLoad;
ImageDecoder dec;
RenderedImage op;
public MultiPageRead(String filename) throws Exception {
setTitle("Multi page TIFF Reader");
File file = new File(filename);
SeekableStream s = new FileSeekableStream(file);
TIFFDecodeParam param = null;
dec = ImageCodec.createImageDecoder("tiff", s, param);
System.out.println("Number of images in this TIFF: " +
dec.getNumPages());
// Which of the multiple images in the TIFF file do we want to load
// 0 refers to the first, 1 to the second and so on.
imageToLoad = dec.getNumPages() - 3;
/*
RenderedImage op =
new NullOpImage(dec.decodeAsRenderedImage(imageToLoad),
null,
OpImage.OP_IO_BOUND,
null);
*/
panel = VisualizzaImmagine(dec,imageToLoad);
// Display the original in a 800x800 scrolling window
//panel = new ScrollingImagePanel(op, 800, 800);
//add(panel);
Panel pnl = new Panel();
pnl.setSize(new Dimension(800,20));
Button btnZoomIn = new Button("Zoom In");
Button btnZoomOut = new Button("Zoom Out");
Button btnExit = new Button("Exit");
btnZoomIn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try{
panel = VisualizzaImmagine(dec,imageToLoad++);
//gestire la visualizzazione con lo zoom
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
btnZoomOut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//DeZoomare l'immagine
}
});
btnExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
pnl.add(btnZoomIn);
pnl.add(btnZoomOut);
pnl.add(btnExit);
this.setLayout(new GridLayout(2,1));
add(panel);
add(pnl);
}
public ScrollingImagePanel VisualizzaImmagine(ImageDecoder dec, int imageToLoad) throws Exception {
RenderedImage op =
new NullOpImage(dec.decodeAsRenderedImage(imageToLoad),
null,
OpImage.OP_IO_BOUND,
null);
panel = new ScrollingImagePanel(op, 800, 800);
return panel;
}
public static void main(String [] args) {
String filename = "c:"+File.separator+"file.tif"; //args[0];
try {
MultiPageRead window = new MultiPageRead(filename);
window.pack();
window.show();
} catch (Exception ioe) {
System.out.println(ioe);
}
}
}
alla prezzione del bottone zoom in dovrebbe scalare di un livello e farmelo vedere... ma non me lo fa vedere... l'immagine rimane sempre al livello di quando la carica per la prima volta...
Ho messo un pò di repaint qui e là ma non funziona...
Grazie a tutti per l'aiuto!
Simone