生のビットマップ データのみを取得する必要があります (ヘッダーやその他の情報はありません)。次のコードを使用して、ビットマップ データを取得しました。
using (Bitmap bitmap = svgDocument.Draw())
{
Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
BitmapData bitmapData = bitmap.LockBits(rect, ImageLockMode.ReadWrite, bitmap.PixelFormat);
var length = Math.Abs(bitmapData.Stride) * bitmapData.Height;
byte[] bytes = new byte[length];
Marshal.Copy(bitmapData.Scan0, bytes, 0, length);
bitmap.UnlockBits(bitmapData);
MemoryStream memoryStream = new MemoryStream();
string filename = DateTime.Now.Ticks.ToString() + ".bmp"; // this works fine
bitmap.Save(filename, ImageFormat.Bmp);
string base64 = Convert.ToBase64String(bytes, Base64FormattingOptions.InsertLineBreaks); // the base64 is reversed.
}
ビットマップを保存すると、すべて問題なく表示されます。画像は反転していません。ただし、データを Base64 に変換するためだけにバイトを使用すると、画像が反転します。
編集1:
これは Base64 変換とは何の関係もないと思います。バイト順が逆になっているようです。
コードを使用して画像を保存すると、画像は次のようになります。
バイトを使用すると、次のように表示されます。
解決:
解決策を見つけました。新しいビットマップを作成する代わりに、ヘッダー情報の最初の 54 バイトをスキップして、バイト配列を格納しました。
MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, ImageFormat.Bmp);
// Skip header
IEnumerable<byte> bytes = memoryStream.ToArray().Skip(54);