1

マルチクライアントチャットサーバーを作っています(完了)。

画像送信を追加したい。メッセージ client1 write message と getbyte -> Server -> getstring を送信するときにこのメソッドを使用しました

だから私はこのようにコーディングしています(私はこの部分はできません)画像をロード - > ImageToBase64(画像) - > getbyte - >サーバー - > getstring - > Base64ToImageクライアント送信部分

この関数を使用するにはどうすればよいですか。このメソッドを実行できます。

 private void button1_Click(object sender, EventArgs e)
 {
    Image screen;
    screen=Image.FromFile("C:\\Users\\User\\Desktop\\Paint.bmp");
    screentext = ImageToBase64(screen); //actually I do not know what parameter should be here

    StreamWriter wrthr = new StreamWriter(@"C:\Users\User\Desktop\giden.txt");
    wrthr.Write(screentext); 
    wrthr.Close(); // result empty txt
    }




public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
{
  using (MemoryStream ms = new MemoryStream())
  {
    // Convert Image to byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();

    // Convert byte[] to Base64 String
    string base64String = Convert.ToBase64String(imageBytes);
    return base64String;
  }
}


public Image Base64ToImage(string base64String)
{
  // Convert Base64 String to byte[]
  byte[] imageBytes = Convert.FromBase64String(base64String);
  MemoryStream ms = new MemoryStream(imageBytes, 0, 
    imageBytes.Length);

  // Convert byte[] to Image
  ms.Write(imageBytes, 0, imageBytes.Length);
  Image image = Image.FromStream(ms, true);
  return image;
}
4

1 に答える 1

1

編集:ここには2つの問題があります...

への 2 番目の引数の選択ImageToBase64

それはあなた次第です - BMP ファイルとして保存しますか? もしそうなら、実際には を経由する必要はまったくありませんImage... からバイトをロードし、Paint.bmpそれらを直接 Base64 に変換します:

byte[] bytes = File.ReadAllBytes(@"C:\Users\User\Desktop\Paint.bmp");
File.WriteAllText(@"C:\Users\User\Desktop\giden.txt",
                  Convert.ToBase64String(bytes));

または、PNG や JPEG などの別の形式を選択することもできます。

string screentext = ImageToBase64(screen, ImageFormat.Png);

screentext(現時点ではどこで宣言されているかは明確ではありませんが、ほぼ確実にローカル変数である必要があります。)

base64 から変換しています...

これが問題です:

MemoryStream ms = new MemoryStream(imageBytes, 0, 
  imageBytes.Length);

// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);

Write呼び出しは必要ありません。ここでは積極的に有害です。

  • MemoryStreamwithを構築したimageBytesので、すでにそのデータが含まれています
  • ストリームに書き込むことで、「カーソル」を最後に移動したため、読み取るものは何もありません

使用するだけです:

public Image Base64ToImage(string base64String)
{
  // Convert Base64 String to byte[]
  byte[] imageBytes = Convert.FromBase64String(base64String);
  MemoryStream ms = new MemoryStream(imageBytes);
  return Image.FromStream(ms, true);
}
于 2013-07-28T11:20:26.537 に答える