PDA

View Full Version : [C#] Image.Save mi altera l'immagine...


Lakaj
29-01-2008, 12:24
Sto lavorando ad un'applicazione che carica un file Jpeg, modifica alcuni bit dei pixel scrivendoci del testo dentro...
L'applicazione funziona, però sono costretto a salvarla come

img.save(path, ImageFormat.Bmp);

e viene fuori un Jpeg di 2,84 mega contro i 126 kilobyte dell'originale...

Se salvo come

img.save(path);

mi comprime di sua libera iniziativa l'immagine e me la porta a 120 Kb e io non posso perdere neanche mezza informazione di quello che c'è la dentro...quindi non funziona più nulla quando vado a recuperami il testo che ci ho nascosto dentro

Ora conoscete un modo per salvare la Jpeg senza alterare in alcun modo cio' che ho caricato, cioè senza compressioni ?

banryu79
29-01-2008, 21:44
Ora conoscete un modo per salvare la Jpeg senza alterare in alcun modo cio' che ho caricato, cioè senza compressioni ?

Ora, non sono un esperto in materia, ma per quello che so credo proprio che non ci sia la possibilità di salvare un immagine in formato jpeg senza compressioni, dato che per definizione il formato jpeg è un formato compresso...

Mi pare di aver capito che la difficoltà è quando vai a rileggere il testo, quindi il "nocciolo" della situazione è la logica implementata nella funzione/metodo che va a rileggere l'immagine compressa tentando di riconoscere del testo?
Chi è che legge l'immagine per l'acquisizione del testo, un algoritmo che opera sul formato del file dell'immagine o un dispositivo fisico esterno?

Lakaj
30-01-2008, 18:23
Ora, non sono un esperto in materia, ma per quello che so credo proprio che non ci sia la possibilità di salvare un immagine in formato jpeg senza compressioni, dato che per definizione il formato jpeg è un formato compresso...

Mi pare di aver capito che la difficoltà è quando vai a rileggere il testo, quindi il "nocciolo" della situazione è la logica implementata nella funzione/metodo che va a rileggere l'immagine compressa tentando di riconoscere del testo?
Chi è che legge l'immagine per l'acquisizione del testo, un algoritmo che opera sul formato del file dell'immagine o un dispositivo fisico esterno?

L'immagine viene letta da un algoritmo che lavora su immagini JPEG e Bitmap con profondità di colore a 24 bit.
Se lavoro su un Bitmap il file viene modificato e salvato con la stessa identica dimensione dell'originale.
Se invece lavoro sul Jpeg e lo salvo in formato Jpeg mi sballano i pixel (ho provato con qualunque livello di qualità, anche 100, che mi aveva suggerito compressione 0)
a qualunque livello di qualità mi cambia i pixel dentro.
quindi devo salvare in formato bitmap(anche le jpeg) e mi si gonfia il file di molto(però mi conserva tutto senza cambiarmi i pixel)

a me non è che crea molti problemi il fatto che il file si gonfi, però vorrei mantenere una certa congruenza con l'originale, oltretutto mi sembra logico aspettarmi che se apro un file per scriverci qualche modifica dentro, mi aspetto che venga scritto un file nuovo identico a quello aperto , identico tranne che per quei pochi byte modificati,
non mi aspetto che mi prende il file, io lo modifico, e all'atto del salvataggio mi cambia le carte in tavola riprocessandolo e applicandogli una compressione senza averne fatto richiesta.

||ElChE||88
30-01-2008, 18:29
img.save(path, ImageFormat.Bmp);

e viene fuori un Jpeg di 2,84 mega contro i 126 kilobyte dell'originale...
Veramente viene fuori una bitmap, al massimo l'estensione è jpg. :stordita:

Comunque, riesci a postare il pezzo di codice in questione?

Lakaj
30-01-2008, 18:50
Veramente viene fuori una bitmap, al massimo l'estensione è jpg. :stordita:

Lo so, era per capirci, volevo dire che veniva fuori un Jpg col cuore di Bitmap, ma pensavo di far ridere :stordita:

public void create_stego(String testo, String chiave)
{
//Si utilizza il carattere tilde per determinare la fine del messaggio scritto.
testo += "~";
//Di default il C# utilizza Unicode come tecnica di codifica dei caratteri nelle stringhe.
//E' stata scelta la codifica ASCII per risparmiare spazio.
Encoding ascii = Encoding.ASCII;
//Conversioni unicode-ascii
byte[] testoasc = ascii.GetBytes(testo);
byte[] chiaveasc = ascii.GetBytes(chiave);
byte[] car1 = new byte[3];
byte[] car2 = new byte[3];
byte ultimo;
int copiax, copiay, x = 0, y = 0;
for (int i = 0, k = 0; i < testoasc.Length; i++, k = (k + 1) % chiave.Length)
{
//Viene calcolata la posizione successiva del pixel dove scrivere il carattere
if ((x + chiaveasc[k]) >= img.Width)
{
y++;
x = (x + chiaveasc[k]) % img.Width;
}
else
x += chiaveasc[k];
//vengono estratti i bit del carattere ASCII uno ad uno, dal meno
//significativo al più significativo.
ultimo = (byte)(testoasc[i] & 1);
testoasc[i] >>= 1;
for (int j = 2; j >= 0; j--)
{
car2[j] = (byte)(testoasc[i] & 1);
testoasc[i] >>= 1;
}
for (int j = 2; j >= 0; j--)
{
car1[j] = (byte)(testoasc[i] & 1);
testoasc[i] >>= 1;
}
//E viene effettuata la modifica del pixel.
modpixel(x, y, car1);
copiax = x;
copiay = y;
if ((x + 1) >= img.Width)
{
y++;
x = 0;
}
else
x++;
modpixel(x, y, car2);
if ((x + 1) >= img.Width)
{
y++;
x = 0;
}
else
x++;
//Viene infine modificato l'ultimo pixel
mod_last_pixel(x, y, ultimo);
x = copiax;
y = copiay;
}
}


public void modpixel(int x,int y,byte[] vetbit)
{
//Il metodo che effettua la modifica del pixel utilizzando
//gli operatori a basso livello per la manipolazione del bit meno significativo.
Color pixel=img.GetPixel(x,y);
byte[] old={pixel.R,pixel.G,pixel.B};
for(int i=0;i<3;i++)
{
if(vetbit[i]==1)
old[i]|=1;
else
old[i]&=254;
}
try
{
img.SetPixel(x, y, Color.FromArgb(old[0], old[1], old[2]));
}
catch (Exception)
{
MessageBox.Show("Errore, l'immagine processata deve essere a 24 bit");
Application.Exit();
}
pixel = img.GetPixel(x, y);
}

poi, da qualche parte ho questo

private void salvaToolStripMenuItem_Click(object sender, EventArgs e)
{
//Mostra a video la finestra che permette di salvare lo stego-object
//sotto forma di file bitmap o jpeg.
if (pictureBox2.Visible)
{
SaveFileDialog savedial = new SaveFileDialog();
savedial.InitialDirectory = System.IO.Directory.GetCurrentDirectory();
savedial.Filter = "JPEG File (*.jpg)|*.jpg|BMP File (*.bmp)|*.bmp";
savedial.FilterIndex = 2;
savedial.RestoreDirectory = true;
if (savedial.ShowDialog() == DialogResult.OK)
{
try
{
(objst1.get_image()).Save(savedial.FileName,ImageFormat.Bmp);
}
catch (Exception)
{
MessageBox.Show("Non è possibile salvare il file");
}
}
}
else
MessageBox.Show("E' necessario caricare un'immagine.");
}

Ora il codice non è che sia scritto bene, però funziona :Prrr:
ho solo quel problema:fagiano:

banryu79
31-01-2008, 00:41
Ciao, guarda, non so se ho afferrato bene il problema; permettimi di riassumere la situazione:

1) hai un'immagine jpg e devi inserirci dentro un testo;

2) processi i pixel dell'immagine per disegnare il testo;

3) salvi l'immagine processata, e siccome la compressione jpeg ti "perde" per la strada parte dell'informazione dei pixel originari la cosa non funziona perchè:

A) visivamente il testo che avevi disegnato non è come vuoi
o
B) da un'altra parte c'è un altro pezzo di codice che dovrebbe riprocessare l'immagine salvata col testo disegnato e riconoscere quel testo?

Nel caso fosse B) lo scenario, non puoi "fare una furbata" del tipo andare a scrivere il testo che disegni nei pixel dell'immagine come stringa in qualche punto del file jpg?
Cioè, magari il formato jpg (faccio un ipotesi perchè non ne conosco i dettagli di implementazione) prevede un header del file (quasi sicuramente, perchè così si possono ottenere alcune info sull'immagine codificata senza dover andare a ricostruire i pixel) se tu potessi scriverci in maniera "indolore" potresti memorizzare lì (o in un altro punto opportuno) una bella stringa equivalente al testo che hai disegnato nei pixel; a quel punto chi deve leggere l'immagine con lo scopo di riconoscere il testo disegnato in realtà va a leggere la stringa...

Spero di non aver sparato vaccate, in caso perdonami, in nome dell'orario a cui sto postando :D

Lakaj
31-01-2008, 09:43
Ciao, guarda, non so se ho afferrato bene il problema; permettimi di riassumere la situazione:

1) hai un'immagine jpg e devi inserirci dentro un testo;

2) processi i pixel dell'immagine per disegnare il testo;

3) salvi l'immagine processata, e siccome la compressione jpeg ti "perde" per la strada parte dell'informazione dei pixel originari la cosa non funziona perchè:

A) visivamente il testo che avevi disegnato non è come vuoi
o
B) da un'altra parte c'è un altro pezzo di codice che dovrebbe riprocessare l'immagine salvata col testo disegnato e riconoscere quel testo?

Nel caso fosse B) lo scenario, non puoi "fare una furbata" del tipo andare a scrivere il testo che disegni nei pixel dell'immagine come stringa in qualche punto del file jpg?
Cioè, magari il formato jpg (faccio un ipotesi perchè non ne conosco i dettagli di implementazione) prevede un header del file (quasi sicuramente, perchè così si possono ottenere alcune info sull'immagine codificata senza dover andare a ricostruire i pixel) se tu potessi scriverci in maniera "indolore" potresti memorizzare lì (o in un altro punto opportuno) una bella stringa equivalente al testo che hai disegnato nei pixel; a quel punto chi deve leggere l'immagine con lo scopo di riconoscere il testo disegnato in realtà va a leggere la stringa...

Spero di non aver sparato vaccate, in caso perdonami, in nome dell'orario a cui sto postando :D
"Disegnare" ? :confused: io non disegno nulla...

Io in pratica mi prendo una stringa che mi viene fornita in input dall'utente, la trasformo in ascii (per ragioni di praticità) e scrivo il byte ascii di ogni lettera in 3 pixel consecutivi settandomi per ogni tripla R,G,B il bit meno significativo al fine di non alterare l'immagine, quindi considerando che un carattere ascii mi occupa 7 bit, ho bisogno di 3 pixel:

R , G, B | R, G, B| R

e la posizione dei 3 pixel da modificare la ottengo con una chiave diciamo 'numerica' fornitami dall'utente...
In pratica io mi prendo i pixel e li manipolo al fine di nasconderci testo all'interno.
E' una implementazione stupida di 'steganografia' tramite tecnica LSB.
Ora se salvo con la save l'immagine che ho modificato, mi applica una ulteriore compressione tale da alterarmi tutti i bit modificati e quindi perdo il messaggio nascosto.
L'unica codifica 'non invasiva' si è rivelata la bitmap, che però mi salva un file di svariati mega (ovviamente) perchè bitmap è un formato ad alta fedeltà
Non c'è qualcosa che mi faccia restare il file della stessa dimensione dell'originale non rimescolandomi i bit ? :(

banryu79
31-01-2008, 12:30
L'unica codifica 'non invasiva' si è rivelata la bitmap, che però mi salva un file di svariati mega (ovviamente) perchè bitmap è un formato ad alta fedeltà
Non c'è qualcosa che mi faccia restare il file della stessa dimensione dell'originale non rimescolandomi i bit ? :(

Leggendo qua (http://en.wikipedia.org/wiki/JPEG)(jpeg format from wikipedia) direi di no.

Però potresti nascondere il testo, invece che nei bit di colore dei pixel (che se leggi il link che ti ho postato capirai perchè non è possibile, alla luce di come vengono trasformati i valori e ricavati applicando di diverse formule e algoritmi ogni volta che si deve "ricostruire" l'immagine e "salvarla/archiviarla") seguendo il suggerimento che ti ho dato sopra.

Infatti, sempre alla pagina che ti ho linkato, alla sezione "Syntax and structure" trovi una bella tabella che ti illustra i marcatori tipici presenti in un file jpeg... penso tu possa sfruttare il penultimo marker della tabella, quello sopra EOI (End Of Image) che si chiama COM (COMment) ed è di dimensione variabile, serve a inserire un commento testuale.

Puoi, nel caso sia gìà presente nel file a cui vai a inserire il tuo testo, conservare il commento e scriverti dopo il tuo testo inserendoci qualcosa subito prima che ti fa da tuo marcatore per riconoscerlo.

Ciao :)


P.S.: l'unico inconveniente, in questo caso, è che la dimensione finale dell'immagine dopo che hai inserito il tuo testo è diversa da quella originale, cosa che non avveniva andando a scrivere sfruttando i bit già usati per il colore...

Lakaj
31-01-2008, 14:02
Leggendo qua (http://en.wikipedia.org/wiki/JPEG)(jpeg format from wikipedia) direi di no.

Però potresti nascondere il testo, invece che nei bit di colore dei pixel (che se leggi il link che ti ho postato capirai perchè non è possibile, alla luce di come vengono trasformati i valori e ricavati applicando di diverse formule e algoritmi ogni volta che si deve "ricostruire" l'immagine e "salvarla/archiviarla") seguendo il suggerimento che ti ho dato sopra.

Infatti, sempre alla pagina che ti ho linkato, alla sezione "Syntax and structure" trovi una bella tabella che ti illustra i marcatori tipici presenti in un file jpeg... penso tu possa sfruttare il penultimo marker della tabella, quello sopra EOI (End Of Image) che si chiama COM (COMment) ed è di dimensione variabile, serve a inserire un commento testuale.

Puoi, nel caso sia gìà presente nel file a cui vai a inserire il tuo testo, conservare il commento e scriverti dopo il tuo testo inserendoci qualcosa subito prima che ti fa da tuo marcatore per riconoscerlo.

Ciao :)


P.S.: l'unico inconveniente, in questo caso, è che la dimensione finale dell'immagine dopo che hai inserito il tuo testo è diversa da quella originale, cosa che non avveniva andando a scrivere sfruttando i bit già usati per il colore...
L'obiettivo non è inserire testo nell'immagine, è nasconderlo nell'immagine.
Steganografia (http://it.wikipedia.org/wiki/Steganografia)
Se lo mettessi in un marker noto a tutti non sarebbe più nascosto. Inoltre devo nasconderlo con una precisa tecnica, perchè è un esercizio che serve da saggio per un esame...
cmq grazie 1000

banryu79
31-01-2008, 14:54
Ah, ok, finalmente ho capito :)

L'obiettivo non è inserire testo nell'immagine, è nasconderlo nell'immagine.
Steganografia (http://it.wikipedia.org/wiki/Steganografia)

Molto interessante,
in tal caso mi spiace, ma temo di non aver suggerimenti utili.

Cioè, se nel formato jpeg è sicuro che anche gli algoritmi con minor tasso di predita di informazione comunque hanno pur sempre una perdita di informazione che, per quanto poco, è sempre > 0, allora non sembra possibile fare quello che vorresti in quel modo.

Potrebbe però funzionare così: prendi la .jpeg originale in cui devi "steganografare" il messaggio/testo, la riconverti in .bmp applicando gli stessi algoritmi che erano stati usati per comprimerla (per ottenere la stessa identica .bmp) , poi, nella .bmp inserisci il testo, la salvi ricomprimendola in .jpeg e la invii;

Chi la riceve, dall'altra parte, la deve decomprimere per riottenere la stessa identica .bmp in cui tu avevi inserito il testo, et voilà.

In pratica l'importante è che mittente e ricevente si accordino prima sull'utilizzo dell'algoritmo di compressione da/a .jpeg (che funge da canale) in modo che la .bmp da cui leggono/su cui scrivono sia identica.
Ergo la trasformazione deve essere identica

Questo funzionerebbe ammesso che tu possa risolvere l'esercizio in questo modo, e dipende dai vincoli dati nell'esercizio stesso, credo.

Altro non mi viene in mente, ciao :)

Lakaj
31-01-2008, 15:11
Ah, ok, finalmente ho capito :)

Molto interessante,
in tal caso mi spiace, ma temo di non aver suggerimenti utili.

Cioè, se nel formato jpeg è sicuro che anche gli algoritmi con minor tasso di predita di informazione comunque hanno pur sempre una perdita di informazione che, per quanto poco, è sempre > 0, allora non sembra possibile fare quello che vorresti in quel modo.

Potrebbe però funzionare così: prendi la .jpeg originale in cui devi "steganografare" il messaggio/testo, la riconverti in .bmp applicando gli stessi algoritmi che erano stati usati per comprimerla (per ottenere la stessa identica .bmp) , poi, nella .bmp inserisci il testo, la salvi ricomprimendola in .jpeg e la invii;

Chi la riceve, dall'altra parte, la deve decomprimere per riottenere la stessa identica .bmp in cui tu avevi inserito il testo, et voilà.

In pratica l'importante è che mittente e ricevente si accordino prima sull'utilizzo dell'algoritmo di compressione da/a .jpeg (che funge da canale) in modo che la .bmp da cui leggono/su cui scrivono sia identica.
Ergo la trasformazione deve essere identica

Questo funzionerebbe ammesso che tu possa risolvere l'esercizio in questo modo, e dipende dai vincoli dati nell'esercizio stesso, credo.

Altro non mi viene in mente, ciao :)
In effetti potrebbe essere una buona idea:

In fase di codifica

salvo in formato bitmap
mi apro questa bitmap
me la salvo in formato jpeg
cancello la bitmap che non mi serve più

In fase di decodifica

apro questa jpeg
me la salvo in formato bitmap
apro questa bitmap
decodifico i bit
appena ho finito cancello la bitmap

almeno se ho ben capito.
E' una buonissima idea e inoltre mi sembra l'unica, non credo ci sia altro da fare, a meno che uno non abbia il malsano hobby di manipolare a basso livello l'algoritmo di compressione delle jpeg, così poi mi ricoverano...
Appena ho tempo faccio questo tentativo.
ciao

^TiGeRShArK^
31-01-2008, 15:35
Non funziona perchè per definizione la compressione JPEG è lossy e tu vorresti recuperare l'informazione persa.
Anche facendo i salvataggi mediani in BMP non risolveresti niente perchè comunque quando la salvi in JPG perdi l'informazione che hai scritto e da un JPG non puoi in alcun modo ritornare *esattamente* all'immagine originale.
Secondo me il modo migliore è usare un qualche tipo di compressione lossless (TIFF con LZW o PNG tanto per fare un esempio), oppure usare (se esiste) qualche formato che ti permetta di lasciare non compresse (oppure compresse in maniera lossless) alcune regioni dell'immagine, dove poi tu andresti ad applicare il tuo algortimo.
Sinceramente non mi ricordo se JPEG2000 permettesse qualcosa del genere..
Di sicuro (o meglio.. se la mia memoria non è totalmente azzerata) permette anche di specificare un tipo di compressione lossless, però ora non ricordo se era possibile specificare una compressione di tipo ibrida.
In conclusione: per quello che devi fare dimenticati metodi di compressione lossy...
a meno di non aver trovato il modo di invertire l'entropia dell'informazione :asd:

Lakaj
31-01-2008, 16:08
d'oh

banryu79
31-01-2008, 17:45
Di sicuro (o meglio.. se la mia memoria non è totalmente azzerata) permette anche di specificare un tipo di compressione lossless, però ora non ricordo se era possibile specificare una compressione di tipo ibrida.
In conclusione: per quello che devi fare dimenticati metodi di compressione lossy...
a meno di non aver trovato il modo di invertire l'entropia dell'informazione :asd:
Hai mica qualche link utile che rimandi ai dettagli della manipolazione del formato jpeg, in modo che ci si possa documentare?
Se esistesse la possibilità di circoscrivere anche solo una piccola regione come lossless Lakaj avrebbe risolto il problema.
Le uniche trasformazioni lossless sulle jpeg sono le rotazioni, che io sappia.

Cmq Lakaj scusa l'ignoranza mia, io ipotizzavo, credendo che esistesse almeno una funzione biunivoca di trasformazione in formato jpeg, invece parrebbe di no.

@Lakaj: ma devi per forza usare il formato jpeg come canale? Sennò buttati su altri formati, come diceva TigerShark

Lakaj
31-01-2008, 19:21
@Lakaj: ma devi per forza usare il formato jpeg come canale? Sennò buttati su altri formati, come diceva TigerShark

In effetti si...
però volevo manipolare file in un formato molto diffuso...
in effetti ho messo come prima scelta i file .bmp da aprire, con quelli il problema non esiste, apro un bitmap di 1 mega lo modifico e mi salva un altro bitmap di 1 mega senza alterare altro... infatti il FilterIndex della OpenFileDialog punta all'apertura come bitmap :)
Poi fate presto a dire carica altri formati, già caricando bitmap blasfemi con profondità 8 bit crashava tutto, ho dovuto impostare un try-catch sulla SetPixel :) perchè poi tra l'altro i bitmap a 8 e 16 bit utilizzano una codifica diversa, mi pare utilizzino indicizzazione...
un casino praticamente :(

AnonimoVeneziano
31-01-2008, 19:37
E' ovvio che con JPEG quello che vuoi fare NON SI PUO' FARE per i motivi già spiegati da Tiger .

JPEG è lossy e quindi può prendere l'iniziativa di eliminare i dati che ritiene non necessari per la visualizzazione dell'immagine eliminando di fatto i tuoi bit (senza possibilità di recupero).

Non so che formati supporti la "Image", ma l'unico modo per fare quello che vuoi penso sia quello di usare un formato di compressione Lossless, come PNG ad esempio.

Ciao

^TiGeRShArK^
31-01-2008, 20:40
Ho appena visto che questo programma lo fa:
http://steghide.sourceforge.net/index.php
però sinceramente non ho voglia di mettermi a leggere quei sorgenti del cappero ... :p
Cmq oltre che inserire i dati nelle frequenze spaziali + basse (che sono lasciate *di solito* invariate durante la compressione) non mi viene in mente niente...

wisher
31-01-2008, 20:48
Sto lavorando ad un'applicazione che carica un file Jpeg, modifica alcuni bit dei pixel scrivendoci del testo dentro...
L'applicazione funziona, però sono costretto a salvarla come

img.save(path, ImageFormat.Bmp);

e viene fuori un Jpeg di 2,84 mega contro i 126 kilobyte dell'originale...

Se salvo come

img.save(path);

mi comprime di sua libera iniziativa l'immagine e me la porta a 120 Kb e io non posso perdere neanche mezza informazione di quello che c'è la dentro...quindi non funziona più nulla quando vado a recuperami il testo che ci ho nascosto dentro

Ora conoscete un modo per salvare la Jpeg senza alterare in alcun modo cio' che ho caricato, cioè senza compressioni ?
Perchè carichi il file come immagine e non direttamente come file binario?
In questo modo dovrebbe essere molto più agevole leggere/scrivere esattamente i bit che ti servono.

AnonimoVeneziano
31-01-2008, 21:21
Perchè carichi il file come immagine e non direttamente come file binario?
In questo modo dovrebbe essere molto più agevole leggere/scrivere esattamente i bit che ti servono.

Se carica il binario rischia di corrompere il JPEG però. Non lo conosco come formato, ma non vorrei che toccandogli i dati si rischi di rendere inutilizzabile l'immagine.

Comunque si può provare

Ciao

Lakaj
31-01-2008, 21:53
Se carica il binario rischia di corrompere il JPEG però. Non lo conosco come formato, ma non vorrei che toccandogli i dati si rischi di rendere inutilizzabile l'immagine.

Esattamente.
Ci avevo pensato, ma non credo che assemblando bit uno dietro l'altro e salvandoli in jpeg funzioni...
Png lo ho provato. Funziona bene, ma la dimensione dell'immagine è esattamente la stessa di quando la salvo in bitmap, tanto vale salvare in bitmap...
gli avranno copiato il formato :p

vabbè se la prof parla gli dico che si poteva fare solo così...

poi a parte tiff e png gli altri formati sono assurdi...

||ElChE||88
31-01-2008, 21:57
Png lo ho provato. Funziona bene, ma la dimensione dell'immagine è esattamente la stessa di quando la salvo in bitmap, tanto vale salvare in bitmap...
gli avranno copiato il formato :p
Sicuro di non aver dimenticato ImageFormat.Bmp?
PNG è un formato compresso.

^TiGeRShArK^
01-02-2008, 00:08
Esattamente.
Ci avevo pensato, ma non credo che assemblando bit uno dietro l'altro e salvandoli in jpeg funzioni...
Png lo ho provato. Funziona bene, ma la dimensione dell'immagine è esattamente la stessa di quando la salvo in bitmap, tanto vale salvare in bitmap...
gli avranno copiato il formato :p

vabbè se la prof parla gli dico che si poteva fare solo così...

poi a parte tiff e png gli altri formati sono assurdi...

PNG occupa molto meno rispetto alle BMP...