1

我正在制作多客户端聊天服务器(完成)。

但我想添加图像发送。我在发送消息时使用了这个方法 client1 write message and 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

编辑:这里有两个问题......

选择第二个论点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 回答