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

    [C++] Agire su byte di file JPEG per modificare l'immagine

    Finora con la funzione ifstream prelevo byte per byte il valore dell'immagine ("XXX.JPEG")

    codice:
    byteimg=in.get();
    se provo a tirare fuori un'immagine-copia di quella di ingresso va tutto ok

    codice:
     out.put(byteimg);
    tuttavia vorrei modificare l'immagine, ad esempio agendo su un byte (supponendo corrisponda a un pixel) ad esempio modificando dal 500esimo al 600esimo byte memorizzato come:

    codice:
    byteimg++;
    in questo modo però l'immagine di uscita non è più leggibile come immagine

    So che esistono delle funzioni preconfezionate per agire su immagini, ma vorrei provare a cimentarmi per capire come funzionerebbero le modifiche a livello di byte, visto che l'immagine dovrebbe essere riconducibile a una matrice di pixel e quindi modificabile a partire da questa.
    Anche qualche guida o manuale su come si effettuano tali modifiche potrebbe fare al caso mio.
    Ciao

  2. #2

    Re: [C++] Agire su byte di file JPEG per modificare l'immagine

    Originariamente inviato da leonard_shelby
    l'immagine dovrebbe essere riconducibile a una matrice di pixel e quindi modificabile a partire da questa.
    Quello che vedi sullo schermo è una matrice di pixel, non il contenuto del file. Ergo se cambi sconsideratamente un bit del contenuto del file, otterrai un risultato indefinito.

    Per studiare il formato JPEG puoi incominciare da:
    http://en.wikipedia.org/wiki/JPEG

    ovviamente è molto più semplice utilizzare librerie grafiche.

  3. #3
    Le immagini JPEG sono compresse, per cui i bit del file non corrispondono direttamente a pixel dell'immagine finale. Puoi modificare direttamente i byte per modificare i pixel invece nelle immagini DIB (.bmp), in cui, dopo un paio di header, si trovano i byte dell'immagine codificati in maniera molto semplice.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    ok grazie delle info, ho letto anche il link su wikipedia:
    a quanto ne ho capito si effettua una codifica per avere le immagini compresse come .jpeg e quindi le eventuali funzioni di libreria dei vari linguaggi di programmazione (chessò la JAI di java) che operino sulle jpeg attueranno delle decodifiche al fine di estrarre informazioni sull'immagine jpeg, vi torna?

  5. #5
    Sì, è così; di solito si decodifica l'immagine ottenendo una DIB in memoria (facilmente modificabile) e poi, al momento del salvataggio, la si ricodifica.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.