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

时间:2014-10-03 19:10:55

标签: javascript c# asp.net signalr

这是我的第一个ASP.NET应用程序,我无法将服务器端Bitmap对象传递给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对象?如果我这样做,如何将其恢复到客户端的图像?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

您可以将图像转换为字节数组:

public static byte[] ImageToByte(Image img)
{
   ImageConverter converter = new ImageConverter();
   return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

然后将其封装到base64 - 你可以在html中使用base64作为图像源:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />

另一种方法是将该图像保存在服务器上并仅返回指向服务器上的路径的链接,您可以使用类似GUID的内容来生成唯一名称并定期清理旧图像或在客户端断开连接后进行清理等。这样做的好处大型图像上的网络流量较小 - 只需发送文件名即可节省约37%的流量。