大きな jpeg をバイト配列として受け取るように Web リクエストを行います。これは、メモリ ストリームに変換できます。このデータを bitmapdata に取得して、再度バイト配列にマーシャリング コピーできるようにする必要があります。メモリ ストリームから返されたバイト配列が、bitmapdata のマーシャル コピーからバイト配列に返されたバイト配列と同じではないと仮定するのは正しいですか?
サイズが原因でメモリ不足エラーが返されるため、メモリ ストリームをイメージに書き出す必要はありません。また、コンパクトな 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);
}
これは、ビットマップデータからバイト配列を読み取るコードです。
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);
ビットマップに書き込むことなく、必要な変換を使用します。