我只需要獲取原始位圖數據(無標題或其他信息)。我用下面的代碼來獲取位圖數據:轉換爲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