这是我的第一个ASP.NET应用程序,在将服务器端位图对象传递到JavaScript客户端时遇到问题。我正在使用SignalR连接服务器和客户端。
我已经尝试了几种方法,希望这对有ASP.NET经验的人来说很容易。
这是我的服务器端C#:
public void ScreenShot()
{
Rectangle bounds = this.Bounds;
using (Image bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}
Clients.Caller.updateImage(bitmap);
}
}
在客户端,我想获得位图并显示它:
hubproxy.client.updateImage = function (image) {
var img = document.createElement("img");
img.src = image;
document.body.appendChild(img);
};
我必须将其转换为JSON对象吗?如果我这样做,如何将其恢复到客户端的图像?
提前感谢您的帮助。
您可以将图像转换为字节数组:
public static byte[] ImageToByte(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
然后将其复制到base64,您可以使用base64作为html:中的图像源
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />
另一种方法是将该图像保存在服务器上,并只返回到服务器上路径的链接,您可以使用GUID之类的东西来生成唯一的名称,并定期清理旧图像或在客户端断开连接后进行清理等。这样做的好处是大图像上的网络流量较小-只发送文件名可以节省约37%的流量。