如何将位图从ASP.NET传递到JavaScript并显示它



这是我的第一个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%的流量。

最新更新