我只需要获取原始位图数据(无标题或其他信息)。我用下面的代码来获取位图数据:转换为Base64时从字节数组中获得了反转图像
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'文件的问题吗? – Mic
@Mic:请参阅我的编辑 – vikasde
好吧,“代码”和“字节”是什么意思?两种情况下你使用的代码是什么? – Mic