Bitmap => byte[]
Bitmap b = new Bitmap( "test.bmp "); MemoryStream ms = new MemoryStream(); b.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes= ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 這兩句都可以,至於區別么,下面有解釋 ms.Close();
byte[] => Bitmap
byte[] bytelist=bytes; MemoryStream ms1 = new MemoryStream(bytelist); Bitmap bm = (Bitmap)Image.FromStream(ms1); ms1.Close();
1、因為如果不用Bmp的方式轉換字節的話,在轉換到字節的時候將會丟失數據;
2、MemoryStream的GetBuffer並不是得到這個流所存儲的內容,而是返回這個流的基礎字節數組,可能包括在擴充的時候一些沒有使用到的字節。
下面是GetBuffer的部分實現方法,也許看了這個會更明白:
public byte[] GetBuffer() {
return this._buffer;
}
下面是ToArray的實現方法:
public byte[] ToArray() {
byte[] bs = new byte[this._length - this._origin];
for (int i = this._origin, j = 0; i < this._length; i++)
bs[j++] = this._buffer[i];
return bs;
}
return this._buffer;
}
下面是ToArray的實現方法:
public byte[] ToArray() {
byte[] bs = new byte[this._length - this._origin];
for (int i = this._origin, j = 0; i < this._length; i++)
bs[j++] = this._buffer[i];
return bs;
}