2010-07-07 11 views
5

Il titolo spiega più o meno la mia domanda. Mi piacerebbe essere in grado di leggere e scrivere dati JPEG su base pixel usando C#.Come posso leggere e scrivere dati JPEG su base pixel?

Sto pensando qualcosa sulla falsariga di CreateJPEG(x, y) che avrebbe istituito un'immagine vuota JPEG in memoria, e mi darei un oggetto JPEG, e poi qualcosa come SetPixel(x, y, Color) e GetPixel(x, y) l'ultima delle quali vorrei tornare un Color o qualcosa simile. È quindi possibile chiamare un metodo Apply() o Save(), ad esempio, per salvare l'immagine in un formato standard leggibile tramite JPEG (preferibilmente con le opzioni di compressione, ma non è necessario).

E presumo che una libreria o uno spazio dei nomi C# rende tutto questo un processo molto semplice, mi piacerebbe solo sapere il modo migliore per farlo.

+0

Ricorda che quando si modifica un singolo pixel di un'immagine JPEG codificata, più pixel dell'immagine cambieranno a causa della compressione JPEG non imprevedibile. –

+0

Solo una nota riguardante il formato JPEG - in quanto è una compressione con perdita, quindi il colore di un singolo pixel può cambiare tra i salvataggi, anche se non lo hai modificato direttamente, quindi non fare affidamento sui colori dei pixel rimanendo costante EDIT: battuto :) –

+0

Giusto;) Stavo chiedendo perché mi piacerebbe cimentarmi nella scrittura di alcuni software di confronto di immagini, fondamentalmente, dato 2 immagini, produrre una bitmap delle differenze. So che è stato fatto prima, ma sarebbe una buona pratica per me, e avevo solo bisogno di un punto veloce nella giusta direzione (qualcosa di SO è davvero buono per, in realtà). :) – qJake

risposta

9

Dai un'occhiata alla classe Bitmap. Per il disegno avanzato oltre a manipolare il singolo pixel, dovrai utilizzare la classe Graphics.

var image = new Bitmap("foo.jpg"); 

var color = image.GetPixel(1, 2); 
image.SetPixel(42, 42, Color.White); 

image.Save("bar.jpg", ImageFormat.Jpeg); 

Come Lasse V. Karlsen cita nella sua risposta questo non sarà davvero manipolare il file JPEG. Il file JPEG verrà decompresso, i dati dell'immagine verranno modificati e il salvataggio di un nuovo file JPEG viene creato dai dati dell'immagine modificata.

Ciò ridurrà la qualità dell'immagine perché anche la ricompressione di un'immagine inalterata di solito non produce un file JPEG bit-identico a causa della natura delle compressioni JPEG con perdita.

Ci sono alcune operazioni che possono essere eseguite su file JPEG senza decomprimerle e ricompresse - ad esempio ruotando di 90 ° - la manipolazione di singoli pixel non rientra in questa categoria.

+1

"Compressione senza perdita di dati"? Intendi sinistramente. – Dykam

+0

Piuttosto possibile ...: D Thx! –

8

JPEG non è un formato di elaborazione, è un formato di archiviazione.

Come tale, in realtà non si usa un'immagine JPEG in memoria, si ha solo un'immagine. È solo quando lo memorizzi che scegli il formato, come PNG o JPEG.

Come tale, credo che stiate cercando la classe Bitmap in .NET.

Problemi correlati