我只需要获取原始位图数据(没有标题或其他信息)。我使用以下代码获取位图数据:
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);