Leggere rgb di ogni pixel di un immagine con java

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Leggere rgb di ogni pixel di un immagine con java

    fifififi ha scritto:


    per ora questo codice funziona. Stampa i colori rgb giusti.
    Adesso devo fare la funzione che prende il testo e lo trasforma in codice binario. come si fa?
    No no, non ci siamo ... troppi passaggi (e fumosi).

    Conosci gli operatori di shift e le AND/OR/NOT bit-wise (sui bit) ?
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Ho cancellato tutto. No, non so cosa sia.
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Guarda, abbozzato al volo (e non provato per bene):
    BufferedImage bufImg = // ..........
    
    String testo = "testo di prova";
    byte[] bytes = testo.getBytes("UTF-8");
    
    int x = 0;
    int y = 0;
    
    for (byte b : bytes) {
        for (int i = 0; i < 8; i++) {
            int bit = b & 1;
    
            int argb = bufImg.getRGB(x, y);
            argb = argb & ~1 | bit;
            bufImg.setRGB(x, y, argb);
    
            x++;
    
            if (x >= bufImg.getWidth()) {    // fa avanzare di riga, se necessario
                x = 0;
                y++;
            }
    
            b >>= 1;
        }
    }
    Questo fa quello che dicevo io come esempio prima. Cioè codifica 1 bit di informazione in 1 pixel (nel canale del "Blu"). Quindi servono 8 pixel per codificare ciascun byte dell'array.

    Ti spiego anche:

    int bit = b & 1;
    questo prende il bit meno significativo. Facendo una AND con 1, il risultato è 0 o 1 a seconda del bit meno significativo del byte.

    argb = argb & ~1 | bit;
    questo fa prima una "maschera" per azzerare il bit meno significativo (che è del Blu). ~1 vuol dire NOT 1, l'unico bit a 0 è quello meno significativo. argb & ~1 fa una AND con questa maschera, quindi passano tutti i bit TRANNE quello meno significativo, che resta 0.
    Poi | bit fa una OR settando il bit meno significativo.

    b >>= 1;
    sposta a destra di una posizione tutti i bit.
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Grazie mille.
    Alla fine ho risolto, adesso va. Sicuramente lo potrei migliorare è un po' bruttino ma alla fine va... Grazie ancora della disponibilità sei sempre gentile.
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Adesso invece ho il codice RGB di pxel per pixel e ci devo fare un'immagine, come si fa?
  • Re: Leggere rgb di ogni pixel di un immagine con java

    p0ll0 ha scritto:


    Adesso invece ho il codice RGB di pxel per pixel e ci devo fare un'immagine, come si fa?
    Crei un oggetto BufferedImage e poi usi il suo setRGB. Vedi javadoc per i dettagli.
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Quando faccio new BufferedImage(larghezza, altezza,int );
    che cosa devo mettere al terzo posto?
  • Re: Leggere rgb di ogni pixel di un immagine con java

    p0ll0 ha scritto:


    Quando faccio new BufferedImage(larghezza, altezza,int );
    che cosa devo mettere al terzo posto?
    Una delle costanti TYPE_xxxx di BufferedImage.
  • Re: Leggere rgb di ogni pixel di un immagine con java

    ImageIO.write(immagine_modificata, esten, new File(percorso));
    non funziona, non salva l'immagine, che succede?
  • Re: Leggere rgb di ogni pixel di un immagine con java

    p0ll0 ha scritto:


    ImageIO.write(immagine_modificata, esten, new File(percorso));
    non funziona, non salva l'immagine, che succede?
    Posta il codice "vero" e descrivi meglio cosa succede (causa eccezione?)
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Quel codice che ti ho fatto vedere se lo metto in system.out.print stampa false, infatti non lo crea. Però tutto il resto sembrerebbe a posto


    BufferedImage imma= new BufferedImage(immagine.getWidth(), immagine.getWidth(), BufferedImage.TYPE_INT_RGB);

    il fatto è che è un progetto per l'esame e se posto il codice completo rischio la bocciatura.
  • Re: Leggere rgb di ogni pixel di un immagine con java

    p0ll0 ha scritto:


    Quel codice che ti ho fatto vedere se lo metto in system.out.print stampa false,
    Cosa passi come formatName (2° arg)?
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Non so che cos'è formatName , scusa...
  • Re: Leggere rgb di ogni pixel di un immagine con java

    p0ll0 ha scritto:


    Non so che cos'è formatName , scusa...
    boolean write(RenderedImage im, String formatName, File output)
  • Re: Leggere rgb di ogni pixel di un immagine con java

    Ho provato sia con png che jpeg e non vanno entrambi
Devi accedere o registrarti per scrivere nel forum
30 risposte