Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Java e elaborazione delle immagini

    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

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537

    Re: Java e elaborazione delle immagini

    Originariamente inviato da anonimo80
    codice:
    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;
      }
    
    }
    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
    Posso aiutarti qui, in quanto per la tua prima richiesta ci vuole un pò più di tempo.
    Semplicemente crea un vettore di interi di dimensione pari al numero di pixel che formano la tua immagine, infatti altezza x larghezza = area e lo valorizza con i pixel.

    Dimenticavo .... I tag [ code][/code] grazie!
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.