7

Imagefrom aを作成するクラスと他のロジックがあり、クラスから返されたインスタンスが単体テストにある偽物と同じであるByte[]ことをアサートする単体テストを作成しようとしています。ImageImage

次の信頼できる方法が見つかりません。

  • 偽のImage\\ Byte[]Resource\ somethingから始めます。
  • Byte[]偽物を表すaをクラスに渡します。
  • 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

4

2 に答える 2

1

これを試して:

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);
于 2013-04-25T15:10:28.317 に答える
0

Image.Save は画像内のメタデータも更新し、その画像の日付/時刻を変更してバイト配列を変更すると想像できます。

于 2013-04-25T15:10:10.037 に答える