Wie vergleicht man zwei Bilder mit Byte-Arrays?
Ich möchte in der Lage sein, zu konvertieren von Byte[] zu Bild und Umgekehrt.
Habe ich diese beiden Methoden aus hier:
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Scheinen Sie zu funktionieren, aber wenn ich das Tue:
byte[] pic = GetImageFromDb();
bool result = pic == imageToByteArray(byteArrayToImage(pic));
Bekomme ich result = false
!
Irgendeiner Weise, dies zu korrigieren, Methoden oder verschiedener Funktionen zu erreichen mein Ziel?
Dank!
InformationsquelleAutor der Frage Diego | 2012-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
==
vergleichen Sie die Objekt-Referenzen, wenn nicht außer Kraft gesetzt.Da diese zwei verschiedenen
byte[]
Objekte, die Referenzen unterschiedlich sind.Müssen Sie vergleichen die
byte[]
Objekte, die Element für Element, um zu bestätigen, dass Sie identisch sind. Sie könnenSequenceEquals
in diesem Fall.InformationsquelleAutor der Antwort Oded
==
bedeutet, dass Sie eine Referenz auf das gleiche Objekt im Speicher.Diese zeigt, wie vergleichen Sie byte-arrays in ein paar verschiedene Möglichkeiten.
InformationsquelleAutor der Antwort Mark Avenius
Vor kurzem musste ich schreiben, ein Bild cropper, benötigt zum speichern der fileBytes als ein Bild. hier ist, was ich Tat. Hoffentlich helfen Sie.
offensichtlich mein code für das zuschneiden/speichern erweitert. Aber ich war in der Lage, um wieder ein Bild-Objekt aus der Datei bytes.
InformationsquelleAutor der Antwort Tom
Beim re-codieren eines Bildes, wird die resultierende Datei (oder byte-array) kann (leicht?) anders als die ursprüngliche version. Vor allem, wenn das, was Sie aus der Datenbank abrufen war eine jpeg-Datei!
Also selbst wenn Sie vergleichen, werden die bytes in den arrays (anstatt von Referenzen) können Sie die Unterschiede.
BEARBEITEN
Wenn Sie Lesen ein byte[] (enthält eine GIF-kodierte Bild) in eine
BitMap
, diese bytes dekomprimiert werden in 4 (ARGB) bytes pro pixel. Wenn Sie speichern Sie das BitMap in eine (neue) gif-Datei (oder byte[]), die neu kodierte Datei könnte auch anders sein (zum Beispiel die Reihenfolge, in der die Farben gespeichert werden). Es gibt also keine Garantie, dass die neue Datei (oder byte[]) ist identisch mit dem alten, obwohl das Bild selbst nicht verändert.InformationsquelleAutor der Antwort Hans Kesting