我正在制作多客户端聊天服务器(完成)。
但我想添加图像发送。
我在发送消息时使用了这种方法
client1写入消息和getbyte->服务器-> getstring
所以我这样编码(我不能写这部分)
加载图像-> ImageToBase64(image)-> 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;
}
最佳答案
编辑:这里有两个问题...
为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
调用,这在这里非常有害:MemoryStream
构造了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);
}
关于c# - 我无法使用Image to Base64 String函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17907608/