3

form1に1つのpictureBoxとボタンがあります。ボタンをクリックすると、ファイルがサーバーにアップロードされます。今のところ、私は以下の方法を使用しています。最初に画像をローカルに保存してから、サーバーにアップロードします。

Bitmap bmp = new Bitmap(this.form1.pictureBox1.Width, this.form1.pictureBox1.Height);
Graphics g = Graphics.FromImage(bmp);
Rectangle rect = this.form1.pictureBox1.RectangleToScreen(this.form1.pictureBox1.ClientRectangle);
g.CopyFromScreen(rect.Location, Point.Empty, this.form1.pictureBox1.Size);
g.Dispose();
 bmp.Save("filename", ImageFormat.Jpeg);

そして、そのファイルをアップロードします:

using (var f = System.IO.File.OpenRead(@"F:\filename.jpg"))
{
    HttpClient client = new HttpClient();
    var content = new StreamContent(f);
    var mpcontent = new MultipartFormDataContent();
    content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
    mpcontent.Add(content);
    client.PostAsync("http://domain.com/upload.php", mpcontent);
}

StreamContent で Bitmap 型を使用できません。最初にファイルとして保存する代わりに、pictureBox から直接画像をストリーミングするにはどうすればよいですか?

MemoryStream を使用して以下のコードを思いつきましたが、この方法を使用するとアップロードされたファイルのサイズは 0 になります。なんで?

byte[] data;

using (MemoryStream m = new MemoryStream())
{
    bmp.Save(m, ImageFormat.Png);
    m.ToArray();
    data = new byte[m.Length];
    m.Write(data, 0, data.Length);

    HttpClient client = new HttpClient();
    var content = new StreamContent(m);
    var mpcontent = new MultipartFormDataContent();
    content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
    mpcontent.Add(content, "file", filename + ".png");
    HttpResponseMessage response = await client.PostAsync("http://domain.com/upload.php", mpcontent);
    //response.EnsureSuccessStatusCode();
    string body = await response.Content.ReadAsStringAsync();
    MessageBox.Show(body);
}
4

2 に答える 2

0
 Image returnImage = Image.FromStream(....);
于 2013-08-31T21:01:57.587 に答える