我需要获取原始的位图数据(不包括标题或其他信息)。我使用以下代码来获取位图数据:
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);
bytes
的内容和生成的base64
吗?你确定第二种情况不只是与保存bmp
文件的方式有关吗? - Qortex