Laden...

Bei Image.Save() wird Bild (jpg) invertiert gespeichert

Erstellt von Jéré vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.375 Views
Jéré Themenstarter:in
151 Beiträge seit 2009
vor 13 Jahren
Bei Image.Save() wird Bild (jpg) invertiert gespeichert

Hallo Community,

da ich mich jetzt schon etwas mehr damit beschäftigt habe und keine Idee bekomme woran dieses Verhalten liegen könnte, würde ich euch gern um Rat fragen.

Ich hab ein Bild als Datei vorliegen. Dieses speichere ich einmal als Thumb und einmal in der vorhandenen Größe ab.

Folgender Code wird genutzt:


image.Save(datei + ".jpg", ImageFormat.Jpeg);
image = image.GetThumbnailImage(200, 200, null, IntPtr.Zero);
image.Save(datei + "_thumb.jpg", ImageFormat.Jpeg);

"image" stammt aus System.Drawing

Das interessante ist: das Thumbnail wird ganz normal und richtig abgespeichert. Das eigentliche Bild allerdings wird invertiert abgespeichert. Dieses Verhalten war jedoch nicht von Anfang an (Einbau der Methode) so, sondern kam erst vor kurzem.

Hat jemand Erfahrung damit?

Grüßle
Jéré

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Jéré,

was meinst du mit invertiert? Dass die Farben invertiert werden (z.B. aus schwarz wird weiß) oder dass das Bild gespiegelt wird (z.B. aus rechts wird links). Poste im Zweifel mal einen Screenshot. Ich kann mir allerdings nicht vorstellen, dass das Speichern den Effekt hervorruft. Ich vermute, da läuft im Vorfeld was schief.

herbivore

Jéré Themenstarter:in
151 Beiträge seit 2009
vor 13 Jahren

Hallo herbivore,

ein bisschen skurril, aber mit invertieren meine ich wirklich invertieren ("Umkehr der Farben").

In Anhang ist rechts das Thumbnail, welches in ein bestimmtes Verhältnis skaliert wird und links das einfach so, wie es vorher war, kopierte Bild.
Das Bild kommt aus dem Web, wird über eine Schnittstelle gedownloadet (per httpRequest).

Grüßle
Jéré

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Jéré,

hm, das Bild wird zwar in Fehlfarben gespeichert, aber das sind keine (RGB-)invertierten Farben. Beim (RGB-)Invertieren würde der blaue Himmel bzw. das blaue Wasser gelb bzw. orange werden und nicht rot-lila.

Ist das Originalbild evtl. CMYK? Was passiert, wenn du als BMP statt als JPG speicherst? Was passiert, wenn du das Bild vor dem Speichern per DrawImage in ein neues, leeres Bitmap-Objekt kopierst und dann dieses speicherst?

herbivore

Jéré Themenstarter:in
151 Beiträge seit 2009
vor 13 Jahren

huhu,

bevor ich postete, hab ich nicht sämtliche Verhalten probiert, daher werd ich das jetzt mal tun und dann Bescheid geben.
Sicherlich hast du bei den Vorschlägen auch schon Vermutungen, die würde mich beim Zutreffen dann natürlich interessieren.

Grüßle
Jéré

ps. so am Rande für evtl Fehlerquellen: ich nutze WPF

Jéré Themenstarter:in
151 Beiträge seit 2009
vor 13 Jahren

Hallo herbivore,

also probiert habe ich es jetzt mit png und bmp: die Anzeige funktioniert!
Mit Flags hab ich gesehen, dass es sich um ein RGB-Bild handelt.
Beim zeichnen mit DrawImage hatte ich keine Erfolge, dass ich es nicht sicher sagen kann.

Die Größe des Bildes ist ja vorher und hinterher (bei jpg) die gleiche, so dass ich auch keine Kompressionsverluste vermute.

Grüßle
Jéré

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Jéré,

hm, merkwürdige Effekte. Du könntest noch probieren, dass Input-Bild mit einer normalen Bildbearbeitungssoftware in ein BMP zu wandeln und diesen als Input-Bild zu verwenden. Kriegst du dann eine korrekte Ausgabe?

Außerdem kannst du noch ein bisschen mit den Encoder-Parametern spielen. Als erste Anregung siehe JPEG-Dateigröße beeinflussen?!.

Ansonsten gehen mir die Ideen aus.

herbivore

Jéré Themenstarter:in
151 Beiträge seit 2009
vor 13 Jahren

Hallo herbivore,

deine Vermutung scheint in eine gute Richtung zu gehen. In der Tat hab ich jetzt das Bild vorher als jpg und als bmp gespeichert und dann im Programm importiert. Jetzt hab ich als Ausgabe auch wunderbar das jpg in den richtigen Farben.

Allerdings werde ich nicht alle Bilder später vorher bearbeiten können. Ich habe keine Einfluss auf die Bilder, wie sie dann kommen, daher muss ich mich darauf verlassen, dass sie den Anforderungen entsprechen. Es sei denn ich kann in meinem Programm darauf irgendwie einwirken. Hast du Idee was sich durch das neu-speichern verändert haben könnte?

Mit den Angaben der Encoder-Parameter hatte ich es schon probiert, leider auch ohne Erfolg.

Gibt es speziell für WPF eine gute Online-Lektüre für das Bearbeiten von Bildern? In manchen Büchern fällt das Kapitel recht dürftig aus.

Danke für deine Hilfe.

Grüßle
Jéré