Laden...

Komische JPEG-Bilder nach dem Speichern

Erstellt von ToTTo vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.311 Views
T
ToTTo Themenstarter:in
27 Beiträge seit 2007
vor 14 Jahren
Komische JPEG-Bilder nach dem Speichern

Hi,

Ich muss JPEG-Bilder zurechtschneiden und sie dann in einen anderen Ordner sichern.
Meine Aufgabe ist somit eigentlich recht simpel aber leider bekomme ich nach dem Speichern öfter mal Bilder, welche fast nur grau sind.


var encoderParams = new EncoderParameters(1);
                        encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L);

                        croppedImage.Save(tmpimageDirectory, GetEncoderInfo("image/jpeg"), encoderParams);

GetEncoderInfo sieht so aus:


 private static ImageCodecInfo GetEncoderInfo(String mimeType)
        {
            int j;
            ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
            for (j = 0; j < encoders.Length; ++j)
            {
                if (encoders[j].MimeType == mimeType)
                    return encoders[j];
            }
            return null;
        }

Ein Beispielbild hab ich auch mal hochgeladen.

Hat jemand ne Idee woran das liegen und am besten noch wie ich dieses Problem lösen kann.

Danke im Voraus

ToTTo

U
36 Beiträge seit 2008
vor 14 Jahren

Hallo ToTTo,

vielleicht liefert die Funktion GetEncoderInfo einen nachträglich installierten Codec, der nicht funktioniert. Mit dem Build-In-Jpeg-Encoder funktioniert das bei mir einwandfrei.

Gruß

Michael Schmitz

T
ToTTo Themenstarter:in
27 Beiträge seit 2007
vor 14 Jahren

Guter Ansatz aber wie kann ich dann die Qualität der JPEG-Biler beeinflussen?
Wenn ich nur das ImageFormat als JPEG angebe kann ich ja nichts weiteres mehr an Paramtern mitgeben.


Bitmap.Save(Stream, ImageFormat) 

Deswegen ja der ganze Aufwand 😒
Oder meinst Du etwas anderes? Wenn ja, schreib doch bitte einfach mal den Code hier rein.

Thx

ToTTo

U
36 Beiträge seit 2008
vor 14 Jahren

Hallo ToTTo,

da hast du mich gerade mißverstanden. Ich benutze die Funktion <Bitmap.Save(Stream, ImageFormat)> auch nicht, da die Qualität nicht einstellbar ist.

Meine Frage war : Was für ein Objekt liefert die Funktion <GetEncoderInfo> bei Dir zurück ?

Ich benutze den folgenden Encoder :

ImageCodecInfo.CodecName = "Built-in JPEG"
ImageCodecInfo.Clsid = {557cf401-1a04-11d3-9a73-0000f81ef32e}

Schau dir mal die Liste <ImageCodecInfo[] encoders> an, vielleicht enthält die ja mehrere JPEG-Encoder.

Gruß

Michael Schmitz

T
ToTTo Themenstarter:in
27 Beiträge seit 2007
vor 14 Jahren

Bei mir ist es der selbe Codec.

Ich habe gerade mal versucht nur mit ImageFormat zu arbeiten aber da gibt es keinen Unterschied. Ab und zu passiert es einfach, dass die Bilder so aussehen.

Sonst noch Ideen?

T
ToTTo Themenstarter:in
27 Beiträge seit 2007
vor 14 Jahren

Ich habe nochmal weiter getestet und es scheint nicht am JPEG-Codec zu liegen.
Auch wenn ich die Bilder als Bitmap abspeichere oder sie nicht beschneide kommt dieser graue Bereich.
Es scheint wohl bereits beim Laden der Bilder Probleme zu geben.

Jemand ne Idee?

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo ToTTo,

wenn das Bild nach dem Laden schon falsch ist (das kann man ja einfach testen), dann gibt es eigentlich nur drei Gründe: Entweder entspricht das Format der JPEG-Datei nicht der Spezifikation, oder das (Unter-)Format wird von .NET nicht unterstützt oder es ist ein Bug im Framework (wobei letzteres eher unwahrscheinlich ist).

herbivore

L
48 Beiträge seit 2006
vor 14 Jahren

Für mich sieht das so aus, als würde beim schreiben etwas schief gehen.
"Entlädst" Du das Bild in einem anderen Thread oder Disposed den Stream zum Bild? (Während das Save durchgeführt wird?