Laden...

JPG einlesen und als BMP ohne Verluste abspeichern

Erstellt von Michael65589 vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.089 Views
M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren
JPG einlesen und als BMP ohne Verluste abspeichern

Hi,

Ich habe ein JPG-Bild 720x480 8BPP und 95% Qualität. Dieses Bild möchte ich via C# öffnen und als BMP verlustfrei abspeichern.


 Bitmap image1 = new Bitmap(tempFile);
 image3.Save("J:\\test.bmp", ImageFormat.Bmp);

Parallel habe ich das JPG mit IrfanView geöffnet und als BMP gespeichert. Wenn ich die beiden BMP vergleiche, ist das von C# abgespeicherte BMP mehr pixelig als das von IrfanView.

Woran liegt das?
Im Anhang zwei Screenshots die das Problem verdeutlichen sollen

Zwei Bilder kann man nicht anhängen.
Das erste ist das aus C# abgespeicherte

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Hier das Bild das von IrfanView abgespeichert wurde

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo Michael65589,

hast du dir mal How to: Set JPEG Compression Level angeschaut?

Gruss

Coffeebean

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Ich möchte doch BMP speichern, da benötige ich das doch nicht, oder?

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Die Veränderung scheint schon beim öffnen des JPG zu geschehen. Egal ob ich das Bitmap-Objekt als BMP oder JPG mit 100% Qualität speichere, es sieht pixeliger aus als das Original JPG oder das von IrfanView konvertierte BMP.

742 Beiträge seit 2005
vor 8 Jahren

Ich glaube das PixelFormat stimmt nicht, das C#-BMP hat zu wenig Farben.

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Stimmt. Das von IrfanView konvertierte Bild hat 238 unique colors, das von C# nur 16.

Wie kann ich das ändern?

T
64 Beiträge seit 2011
vor 8 Jahren

Teste es mal bitte mit der folgenden Funktionsüberladung und berichte von den Ergebnissen: https://msdn.microsoft.com/de-de/library/4sahykhd(v=vs.110).aspx

Den Boolean dabei natürlich auf true setzen.

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Hab es jetzt so probiert:


Image image1 = Image.FromFile(tempFile, true);
image1.Save("J:\\test.bmp", ImageFormat.Bmp);

Jedoch mit dem gleichen Ergebnis.
Die Anzahl der unique colors ist wieder nur 16

16.806 Beiträge seit 2008
vor 8 Jahren

Naja, das true hat damit soweit ich weiß auch wenig zutun.
Du musst - IIRC - das Bitmap mit PixelFormat.Format8bppIndexed erstellen.

Schau halt mal das PixelFormat von dem von Dir erstellten Image an.
Das wird halt etwas sein, was keine 8 Bit Farbtiefe hat.

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Das Image, egal ob als Bitmap oder Image Objekt erstellt hat das PixelFormat "Format8bppIndexed". Das hab ich nach gesehen.

Es sieht aus als würden beim einlesen des JPG schon Farb- (Grauwert-)Informationen verloren gehen.

Wie kann es sein das sich die Anzahl der unique colors von 238 auf 16 reduziert?

Die Reduktion auf 16 unique colors passiert auch nur, wenn das Quellbild ein JPG ist.
Wenn ich das von IrfanView konvertierte JPG zu BMP einlese und anschließend abspeichere hat das BMP seine ursprünglichen 238 unique colors.

M
Michael65589 Themenstarter:in
32 Beiträge seit 2009
vor 8 Jahren

Ne, hat leider auch nicht geholfen.

Trotzdem Danke.