0

私は 2 つの byte[] - ビットマップの表現 - 1 つは bitmap.save(ms)、ms.toarray から、もう 1 つは他の関数の束から持っています。ウォッチ ウィンドウの出力を目撃した私の目によれば、これら 2 つのバイト配列はまったく同じです。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 配列を使用してメモリストリームを作成すると、画像が上下逆になります。何。誰かが私に何が起こっているのか教えてもらえますか? 今のところ、私は幽霊を信じて、コードのいくつかの場所でビットマップを反転するために松葉杖を置いています。


upd2: 解決しました。私の GetColorData のバグであることが判明しました。残念ながら、私のテスト ビットマップは対称的だったので、Marshall.Copy と Bitmap.Save を介してコピーすると行が異なる順序でコピーされることを確認できませんでした。

4

0 に答える 0