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
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
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
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
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?
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?
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
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?