Leggere rgb di ogni pixel di un immagine con java

di Anonimizzato19191 il
30 risposte

30 Risposte - Pagina 2

  • 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) ?
  • Ho cancellato tutto. No, non so cosa sia.
  • 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.
  • 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.
  • Adesso invece ho il codice RGB di pxel per pixel e ci devo fare un'immagine, come si fa?
  • 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.
  • Quando faccio new BufferedImage(larghezza, altezza,int );
    che cosa devo mettere al terzo posto?
  • p0ll0 ha scritto:


    Quando faccio new BufferedImage(larghezza, altezza,int );
    che cosa devo mettere al terzo posto?
    Una delle costanti TYPE_xxxx di BufferedImage.
  • ImageIO.write(immagine_modificata, esten, new File(percorso));
    non funziona, non salva l'immagine, che succede?
  • 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?)
  • 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.
  • 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)?
  • Non so che cos'è formatName , scusa...
  • p0ll0 ha scritto:


    Non so che cos'è formatName , scusa...
    boolean write(RenderedImage im, String formatName, File output)
  • Ho provato sia con png che jpeg e non vanno entrambi
Devi accedere o registrarti per scrivere nel forum
30 risposte