gpt4 book ai didi

c# - 比较图像作为单元测试的字节数组

转载 作者:太空狗 更新时间:2023-10-29 20:39:45 26 4
gpt4 key购买 nike

我有一个从 Byte[] 创建一个 Image 的类,以及一些其他逻辑,我正在尝试编写一个单元测试来断言从我的类返回的 Image 实例与单元测试中的一些假 Image 相同。

我找不到可靠的方法来:

  • 从一个假的 Image\Byte[]\Resource\something 开始。
  • 将代表假事物Byte[]传递给我的类(class)。
  • 断言从我的类(class)返回的Image 与我的假事物 相同。

这是我到目前为止想出的代码:

Bitmap fakeBitmap = new Bitmap(1, 1);

Byte[] expectedBytes;
using (var ms = new MemoryStream())
{
fakeBitmap.Save(ms, ImageFormat.Png);
expectedBytes = ms.ToArray();
}

//This is where the call to class goes
Image actualImage;
using (var ms = new MemoryStream(expectedBytes))
actualImage = Image.FromStream(ms);

Byte[] actualBytes;
using (var ms = new MemoryStream())
{
actualImage.Save(ms, ImageFormat.Png);
actualBytes = ms.ToArray();
}

var areEqual =
Enumerable.SequenceEqual(expectedBytes, actualBytes);

Console.WriteLine(areEqual);

var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

using(StreamWriter sw = new StreamWriter(Path.Combine(desktop, "expectedBytes.txt")))
sw.Write(String.Join(Environment.NewLine, expectedBytes));


using(StreamWriter sw = new StreamWriter(Path.Combine(desktop, "actualBytes.txt")))
sw.Write(String.Join(Environment.NewLine, actualBytes));

这总是返回 false

最佳答案

试试这个:

public static class Ext
{
public static byte[] GetBytes(this Bitmap bitmap)
{
var bytes = new byte[bitmap.Height * bitmap.Width * 3];
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

Marshal.Copy(bitmapData.Scan0, bytes, 0, bytes.Length);
bitmap.UnlockBits(bitmapData);
return bytes;
}
}
var bitmap = new Bitmap(@"C:\myimg.jpg");
var bitmap1 = new Bitmap(@"C:\myimg.jpg");


var bytes = bitmap.GetBytes();
var bytes1 = bitmap1.GetBytes();
//true
var sequenceEqual = bytes.SequenceEqual(bytes1);

关于c# - 比较图像作为单元测试的字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16217982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com