C# 如何使用字节数组比较两个图像

C# 如何使用字节数组比较两个图像,c#,image,bytearray,C#,Image,Bytearray,我希望能够将字节[]转换为图像,反之亦然 我有两种方法: 它们似乎有效,但如果我有效: byte[] pic = GetImageFromDb(); bool result = pic == imageToByteArray(byteArrayToImage(pic)); 我得到result=false 有没有办法纠正这种方法或一些不同的功能来实现我的目标 谢谢 如果未被覆盖,则使用==将比较对象引用 因为这是两个不同的byte[]对象,所以引用是不同的 您需要逐项比较字节[]对象,以确认它们

我希望能够将字节[]转换为图像,反之亦然

我有两种方法:

它们似乎有效,但如果我有效:

byte[] pic = GetImageFromDb();
bool result = pic == imageToByteArray(byteArrayToImage(pic));
我得到
result=false

有没有办法纠正这种方法或一些不同的功能来实现我的目标


谢谢

如果未被覆盖,则使用
==
将比较对象引用

因为这是两个不同的
byte[]
对象,所以引用是不同的


您需要逐项比较
字节[]
对象,以确认它们是相同的。您可以在这种情况下使用。

=
表示您在内存中有对同一对象的引用


演示如何以几种不同的方式比较字节数组。

对图像进行重新编码时,生成的文件(或字节数组)可能(稍微?)与原始版本不同。尤其是如果你从数据库中检索到的是jpeg文件

因此,即使比较数组中的字节(而不是引用),也可以得到差异

编辑

当您将字节[](包含GIF编码图像)读入位图时,这些字节将解压缩为每像素4(ARGB)字节。将位图保存到(新)gif文件(或字节[])时,新编码的文件可能不同(例如,颜色的存储顺序)。因此,无法保证新文件(或字节[])与旧文件相同,尽管图像本身没有更改。

我最近需要编写一个图像裁剪器,将文件字节保存为图像。这就是我所做的。希望这能对你有所帮助

public Image byteArrayToImage(byte[] fileBytes)
{
    using (MemoryStream fileStream = new MemoryStream(fileBytes))
    {
        return Image.FromStream( fileStream );
    }
}

显然,我的裁剪/保存代码在此基础上进行了扩展。但是我能够从文件字节返回一个图像对象。

此外,OP应该读取类似的内容,以了解如何正确比较它们。@ChrisShain-问题是在不同的数组中有相同的项-排序在这里并不重要。“这在这里很重要。”奥德说得很对,我没听清楚。关于这个问题有很多好问题,但这只是一个(坏的)例子。为什么会是??有没有办法避免它?那为什么返回false呢
newbyte[]{1}.Equals(newbyte[]{1})
@L.B:非常正确。原谅我;对于阵列,这不起作用。有关如何正确比较字节数组的信息,请参阅。相应地更新我的答案。这里有相同的问题:除了==之外,使用pic.equals(ImageToByToByToByToImage(pic));@OliverBernhardt请尝试以下代码
newbyte[]{1}.equals(newbyte[]{1})
public Image byteArrayToImage(byte[] fileBytes)
{
    using (MemoryStream fileStream = new MemoryStream(fileBytes))
    {
        return Image.FromStream( fileStream );
    }
}