0

我有两个 byte[] - 位图的表示形式 - 一个来自 bitmap.save(ms)、ms.toarray,另一个来自一堆其他函数。根据我目睹Watch窗口输出的眼睛,这两个字节数组完全相等。SequenceEquals() 调用也是如此。这是代码:

public void Debug(Bitmap b){
  DrawImage(viewIn, b);
  byte[] t1 = BmpConv.GetAllData(b);
  byte[] t2 = BmpConv.ConcatBytes(BmpConv.GetHeaderData(b), BmpConv.GetColorData(b));
  var eq = t1.SequenceEqual(t2); // returns true
  MemoryStream ms = new MemoryStream(t2);
  DrawImage(viewOut, new Bitmap(ms));
}

问题是:如果内存流是使用 t1 数组创建的,那么图像就可以了。如果使用 t2 数组创建 memorystream,则图像是颠倒的。什么。有人可以告诉我发生了什么吗?现在我会相信鬼魂,只是在我的代码的某些地方放一根拐杖来反转位图。


upd2:已解决。原来是我的 GetColorData 中的一个错误。不幸的是,我的测试位图是对称的,所以我无法看到通过 Marshall.Copy 和 Bitmap.Save 以不同顺序复制行的复制。

4

0 回答 0