Ciao a tutti sto facendo il progetto di elaborazione delle immagini e sono ancora ai primi passi....parto dall'esempio dato dal prof a lezione, un'applet java per ricavare l'istogramma di un'immagine...posto il codice di seguito:
************************************************** *******************
import java.awt.*;
import java.awt.image.*;
import java.applet.Applet;
public class IstogrammaApplet extends Applet {
private Image image;
private ImageCanvas imageCanvas;
private Panel panel;
private TextArea text;
public void init() {
String image_file = getParameter("IMAGEFILE");
image = getImage(getDocumentBase(), image_file);
while(image.getWidth(this)<0);
Dimension imageSize = new Dimension(
image.getWidth(this), image.getHeight(this));
imageCanvas = new ImageCanvas(image, imageSize);
int[] pixels = ImageCanvas.grabImage(image, imageSize);
panel = new Panel(new GridLayout(1,2,10,10));
text = new TextArea(20,5);
panel.add(imageCanvas);
panel.add(text);
add(panel);
text.setText((new Istogramma(pixels)).toString());
}
}
class Istogramma {
private int histo[] = new int[256];
public String toString() {
String text = "";
for(int i=0; i<256; i++) {
text += i+" "+histo[i]+'\n';
}
return text;
}
public Istogramma(int[] rgb) {
for(int i=0; i<rgb.length; i++) {
int tmp = (int) (
(((rgb[i] & 0xff0000)>>16) * 0.299) +
(((rgb[i] & 0x00ff00)>>8 ) * 0.587) +
(((rgb[i] & 0x0000ff) ) * 0.114) );
histo[tmp]++;
}
}
public int getValueAt(int index) {
return histo[index];
}
}
class ImageCanvas extends Canvas {
static final int MIN_WIDTH = 64;
static final int MIN_HEIGHT = 64;
private Image image;
private Dimension size;
public ImageCanvas(Image img, Dimension dim) {
super();
image = img;
size = dim;
}
public Dimension getMinimumSize() {
return new Dimension(MIN_WIDTH, MIN_HEIGHT);
}
public Dimension getPreferredSize() {
return new Dimension(size);
}
public void paint(Graphics g) {
g.drawImage(image, 0, 0, getBackground(), this);
}
static public int[] grabImage(Image image, Dimension size) {
int[] data = new int[size.width * size.height];
PixelGrabber pg = new PixelGrabber(
image, 0, 0, size.width, size.height, data, 0, size.width);
try {
pg.grabPixels();
}
catch (InterruptedException e) {
System.err.println(
"ImageSampler: interrupted while grabbing pixels");
return null;
}
if ((pg.status() & ImageObserver.ABORT) != 0) {
System.err.println(
"ImageSampler: pixel grab aborted or errored");
return null;
}
return data;
}
}
************************************************** *******************
Ora vorrei poter manipolare l'immagine...so che in java è possibile creare variabile del tipo BufferedImage che memorizzano ogni pixel in una posizione dell'array che quindi è possibile manipolare...visto che nell'esempio l'immagine è salvata nella variabile image di tipo Image volevo sapere se era possibile fare un'assegnazione del tipo
BufferedImage tmp = (BufferedImage) image;
visto che bufferedimage è una classe derivata da image, lavorare sull'immagine in questa modalità e poi fare l'assegnamento inverso
image = (Image) tmp;
per poi poter visualizzare l'immagine modificata tamite panel.add(Image)come nell'esempio....
spero di essere stato chiaro
grazie per l'aiuto
Ah un'ultima cosa analizzando il codice del prof non sono riuscito a capire cosa fa la funzione grabImage di ImageCanvas chiamata per inzializzare l'array pixels...grazie ancora

Rispondi quotando