Comment comparer deux images à l'aide de tableaux d'octets
Je veux être en mesure de convertir de Byte[] à l'Image et vice versa.
J'ai ces deux méthodes de ici:
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;
}
Ils semblent fonctionner, mais si je fais:
byte[] pic = GetImageFromDb();
bool result = pic == imageToByteArray(byteArrayToImage(pic));
- Je obtenir result = false
!
Tout pour résoudre ce problème, des méthodes ou des fonctions différentes pour atteindre mon objectif?
Merci!
- même problème ici: stackoverflow.com/questions/8763630/... à l'exception de l' == stuff utilisation pic.equals(imageToByteArray(byteArrayToImage(pic));
- essayez ce code
new byte[] { 1 }.Equals(new byte[] { 1 })
Vous devez vous connecter pour publier un commentaire.
À l'aide de
==
permettra de comparer les références de l'objet si elle n'est pas remplacée.Depuis ces deux différents
byte[]
objets, les références sont différentes.Vous suffit de comparer les
byte[]
objets, élément par élément, afin de confirmer qu'ils sont identiques. Vous pouvez utiliserSequenceEquals
dans ce cas.==
signifie que vous avez une référence à un même objet en mémoire.Cette montre comment comparer des tableaux d'octets dans un peu de façons différentes.
new byte[] { 1 }.Equals(new byte[] { 1 })
J'ai récemment eu besoin d'écrire une image cropper que nécessaire pour enregistrer le fileBytes comme une image. voici ce que j'ai fait. J'espère que cela va vous aider.
évidemment mon code pour la culture/économie développe ce. Mais j'ai été en mesure de retourner un objet Image à partir du fichier en octets.
Lorsque vous ré-encoder une image, le fichier résultant (ou tableau d'octets) peut être (légèrement?) différent de la version originale. Surtout si ce que vous récupérer à partir de la base de données est un fichier jpeg!
Donc, même si vous comparez les octets dans les tableaux (au lieu de références), vous pouvez obtenir des différences.
MODIFIER
Lorsque vous lisez un byte[] (contenant un GIF image encodée) dans un
BitMap
, ces octets sont décompressés en 4 (ARGB) octets par pixel. Lorsque vous enregistrez l'image BitMap d'un (nouveau) fichier gif (ou byte[]), le nouveau fichier encodé pourrait être différente (par exemple, l'ordre dans lequel les couleurs sont stockés). Donc, il n'ya aucune garantie que le nouveau fichier (ou byte[]) est identique à l'ancien, bien que l'image elle-même n'est pas modifiée.