Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5

    Una immagine su tre non visualizzata in Applet

    Ciao a tutti,
    sto cercando di fare un programmino che tratta i pixel delle immagini per modificarle.

    questo programma dovrebbe visualizzare un'immagine, la stessa immagine girata di 180 gradi e la stessa immagine in "bianco e nero".

    viene visualizzato tutto tranne l'immagine in bianco e nero.

    il database che contiene i dati sui pixel dell'immagine in bianco e nero è corretto, i colori sono giusti, ma non riesce a visualizzare l'immagine.. invece l'immagine della figura ruotata si vede..

    ecco il codice completo:

    codice:
    import java.applet.Applet;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.image.ImageObserver;
    import java.awt.image.MemoryImageSource;
    import java.awt.image.PixelGrabber;
     
    public class MainClass extends Applet {
     
      Image i, j, k;
     
     
      public void init() {
     
        MediaTracker mt = new MediaTracker(this);
     
    	// image file name
        i = getImage(getDocumentBase(), "img.gif");
     
        mt.addImage(i, 0);
     
        try {
          mt.waitForAll();
     
          int width = i.getWidth(this);
          int height = i.getHeight(this);
          int pixels[] = new int[width * height];
     
          PixelGrabber pg = new PixelGrabber(i, 0, 0, width, height, pixels, 0, width);
     
          if (pg.grabPixels() && ((pg.getStatus() & ImageObserver.ALLBITS) != 0)) {
     
            j = createImage(new MemoryImageSource(width, height, rowFlipPixels(pixels, width, height), 0, width));
            k = createImage(new MemoryImageSource(width, height, blackAndWhite(pixels, width, height), 0, width));
          }
          else
          	System.out.println("invalid image : MainClass.init()");
        } catch (InterruptedException e) {
          System.out.println("Eccezione Try InterrupterException");
        }
     
        setSize(750,550);
      }
     
     
      public void paint(Graphics g) {
        g.drawImage(i, 10, 10, this); // regular
     
        if (j != null)
          g.drawImage(j, 300, 10, this); // rowFlip
     
        if (k != null)
          g.drawImage(k, 10, 300, this); // black and white
    	else
    	  System.out.println("K = NULL");
      }
     
     
      // turns the image 180°
      private int[] rowFlipPixels(int pixels[], int width, int height) {
     
        int newPixels[] = null;
     
        if ((width * height) == pixels.length) {
          newPixels = new int[width * height];
          int newIndex = 0;
     
          for (int y = height - 1; y >= 0; y--)
            for (int x = width - 1; x >= 0; x--)
              newPixels[newIndex++] = pixels[y * width + x];
        }
        return newPixels;
      }
     
      // makes the image black and white
      private int[] blackAndWhite(int pixels[], int width, int height) {
     
        int newPixels[] = null;
     
        if ((width * height) == pixels.length) {
          newPixels = new int[width * height];
     
    	  // this is the only difference with the method above
          for (int i=0; i<pixels.length; i++)
              newPixels[i] = grigio(coloreArray(pixels[i]));
        }
        return newPixels;
      }
     
      // returns the color (int) in grey scale
      public static int grigio(int[] color) {
    	  int valore = (int) ((0.299*color[0]) + (0.587*color[1]) + (0.114*color[2]));
    	  return (valore & 0xff) + ((valore << 8) & 0xff00) + ((valore << 16) & 0xff0000);
      }
     
      // returns a new array with parameter's RGB value
      public static int[] coloreArray(int i) {
     
    		int blu = (i & 0xff);
    		int green = ((i & 0xff00) >> 8);
    		int red = ((i & 0xff0000) >> 16);
     
    		return new int[]{red, green, blu};
      }
    }

    se voleste provarlo vi basterebbe aggiungere alla cartella dove compilate il programma un file immagine chiamato "img.gif".

    qualche idea sul perchè non funziona?

    grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Ma ho visto che fai questo controllo
    codice:
    [...]
    if (k != null)
          g.drawImage(k, 10, 300, this); // black and white
    else
          System.out.println("K = NULL");
    [...]
    ma ti stampa la stringa o neppure quello, quindi l'immagine è creata correttamente, ma solo non visualizzata??
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5
    no, non mi stampa quella stringa.. mi ero dimenticato di scriverlo.

    k!=null

    e non visualizza lo stesso


  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    coloreArrayPixel è inizializzato?
    codice:
     
    [...]
    for (int i=0; i<pixels.length; i++)
              newPixels[i] = grigio(coloreArray(pixels[i]));
    [...]
    No perchè non c'è altro....la funzione in sè è giusta? Scritta tu a mano o già testata?
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    5
    già, hai ragione, doveva essere lì l'errore ma non capivo dove.

    ad un certo punto ho visto la luce

    l'immagine c'è, i colori ci sono, ma perchè non si vedono?? :master:
    ma certoooo!
    Sono Trasparenti!!

    qui c'è l'errore:
    codice:
      // returns the color (int) in grey scale
      public static int grigio(int[] color) {
    	  int valore = (int) ((0.299*color[0]) + (0.587*color[1]) + (0.114*color[2]));
    	  return (valore & 0xff) + ((valore << 8) & 0xff00) + ((valore << 16) & 0xff0000);
      }
    gli 'int' sono fatti di 4 byte, e il byte più significativo (che indica l'opacità del colore) in questo modo è sempre 00000000.

    in pratica ho solamente dovuto aggiungere '+ 0xff000000' al valore restituito per rendere il primo byte '11111111'. ho provato e funziona

    grazie per l'aiuto!

    Ciao

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da zyker
    già, hai ragione, doveva essere lì l'errore ma non capivo dove.

    ad un certo punto ho visto la luce

    l'immagine c'è, i colori ci sono, ma perchè non si vedono?? :master:
    ma certoooo!
    Sono Trasparenti!!

    qui c'è l'errore:
    codice:
      // returns the color (int) in grey scale
      public static int grigio(int[] color) {
    	  int valore = (int) ((0.299*color[0]) + (0.587*color[1]) + (0.114*color[2]));
    	  return (valore & 0xff) + ((valore << 8) & 0xff00) + ((valore << 16) & 0xff0000);
      }
    gli 'int' sono fatti di 4 byte, e il byte più significativo (che indica l'opacità del colore) in questo modo è sempre 00000000.

    in pratica ho solamente dovuto aggiungere '+ 0xff000000' al valore restituito per rendere il primo byte '11111111'. ho provato e funziona

    grazie per l'aiuto!

    Ciao
    Hai ragione...non me ne ero accorto neppure io e pensare che ho appena risposto ad un tipo in un post precedente a questo....sono stanco....ecco il perchè!!
    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.