Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-01-2008, 13:24   #1
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
[C#] Image.Save mi altera l'immagine...

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 ?
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2008, 22:44   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
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?
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 19:23   #3
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
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.
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 19:29   #4
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da Lakaj Guarda i messaggi
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.

Comunque, riesci a postare il pezzo di codice in questione?
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 19:50   #5
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Veramente viene fuori una bitmap, al massimo l'estensione è jpg.
Lo so, era per capirci, volevo dire che veniva fuori un Jpg col cuore di Bitmap, ma pensavo di far ridere
Codice:
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;
            }
        }
Codice:
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
Codice:
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
ho solo quel problema
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 01:41   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
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
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 10:43   #7
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
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
"Disegnare" ? 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 ?
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 13:30   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Lakaj Guarda i messaggi
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 (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...

Ultima modifica di banryu79 : 31-01-2008 alle 13:33.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 15:02   #9
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Leggendo qua (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
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
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 15:54   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ah, ok, finalmente ho capito
Quote:
L'obiettivo non è inserire testo nell'immagine, è nasconderlo nell'immagine.
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
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 16:11   #11
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
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
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 16:35   #12
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 17:08   #13
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
d'oh
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 18:45   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
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
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

Ultima modifica di banryu79 : 31-01-2008 alle 18:49.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 20:21   #15
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
@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

Ultima modifica di Lakaj : 31-01-2008 alle 20:24.
Lakaj è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 20:37   #16
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
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
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 21:40   #17
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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 ...
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...
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 21:48   #18
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da Lakaj Guarda i messaggi
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.
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 22:21   #19
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da wisher Guarda i messaggi
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
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 22:53   #20
Lakaj
Senior Member
 
L'Avatar di Lakaj
 
Iscritto dal: Oct 2004
Città: Messina
Messaggi: 684
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
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

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

poi a parte tiff e png gli altri formati sono assurdi...
Lakaj è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
Noctua NH-D15 Chromax.black è rea...
NVIDIA aggiorna DGX Spark: nuovo kernel,...
Con Work IQ, Copilot per Microsoft 365 i...
Azure Cobalt 200: svelata la nuova CPU A...
Intel a tutto tondo: tra processi in ram...
AMD FSR Redstone arriverà ufficia...
L'Olanda 'cede' alla Cina: retromarcia t...
Stagione 1 al via: tutte le novità...
TikTok rafforza trasparenza e benessere ...
Zigbee 4.0 è qui: più sic...
La trasformazione agentica di Windows pa...
Crollo del 29% nelle vendite dirette: Ub...
Black Friday anticipato su Amazon: NARWA...
Disastro WhatsApp: esposti 3,5 miliardi ...
Hatsune Miku per tutti: ASUS ROG present...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:13.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v