我製作了一個webrequest來接收一個大的jpeg作爲字節數組。這又可以被轉換爲存儲流。我需要將這些數據轉換爲位圖數據,以便我可以再次將它複製到字節數組中。我是否認爲從內存流返回的字節數組與從bitmapdata的marshall副本返回到字節數組的字節數組不同?將內存流轉換爲位圖數據
我不想寫內存流出來的圖像,因爲它會返回一個內存不足的錯誤,因爲它的大小和我使用的緊湊型CF C#2
這是我的電話的事實服務器..
HttpWebRequest _request = (HttpWebRequest)WebRequest.Create("A url/00249.jpg");
_request.Method = "GET";
_request.Timeout = 5000;
_request.ReadWriteTimeout = 20000;
byte[] _buffer;
int _blockLength = 1024;
int _bytesRead = 0;
MemoryStream _ms = new MemoryStream();
using (Stream _response = ((HttpWebResponse)_request.GetResponse()).GetResponseStream())
{
do
{
_buffer = new byte[_blockLength];
_bytesRead = _response.Read(_buffer, 0, _blockLength);
_ms.Write(_buffer, 0, _bytesRead);
} while (_bytesRead > 0);
}
這是我的代碼從bitmapdata讀取一個字節數組。
Bitmap Sprite = new Bitmap(_file);
Bitmapdata RawOriginal = Sprite.LockBits(new Rectangle(0, 0, Sprite.Width, Sprite.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
int origByteCount = RawOriginal.Stride * RawOriginal.Height;
SpriteBytes = new Byte[origByteCount];
System.Runtime.InteropServices.Marshal.Copy(RawOriginal.Scan0, SpriteBytes, 0, origByteCount);
Sprite.UnlockBits(RawOriginal);
注: 我不想用這個:
Bitmap Sprite = new Bitmap(_file);
我想去來自:用什麼都轉換
MemoryStream _ms = new MemoryStream();
到
System.Runtime.InteropServices.Marshal.Copy(RawOriginal.Scan0, SpriteBytes, 0, origByteCount);
是必要的沒有寫入位圖。
爲什麼不使用一個FileStream:
順便說一句,你可以通過改變你的代碼的圖像讀取保存自己很多的麻煩?我猜你在說你沒有內存空間,但是在文件系統上有空間嗎? – CrazyDart
@CrazyDart嗨,謝謝你的回覆。最終的問題是將這個較大的圖像的部分提取到較小的圖像(又名雪碧)。我不知道這是可能的使用文件流。感謝您的想法,雖然... –