我有两个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数组创建memorystream,则图像没问题。 如果使用t2数组创建memorystream,则图像是颠倒的。 什么。 有人能告诉我发生了什么事吗?现在我要相信幽灵,只是在我的代码的某些地方放一个拐杖来反转位图。
upd2:已解决。原来这是我的GetColorData中的一个错误。不幸的是,我的测试位图是对称的,所以我无法看到通过Marshall.Copy和Bitmap.Save复制以不同的顺序复制行。