【问题标题】:How to display the image on HTML5 canvas that passed from JSON with Base64 String format?如何在 HTML5 画布上以 Base64 字符串格式显示从 JSON 传递的图像?
【发布时间】:2014-04-22 08:40:42
【问题描述】:

在这里需要一些帮助虽然我已经看到很多与此非常相似的问题,但我仍然无法解决它。 因此,我从服务器端编写了一个程序,将帧字节数组(来自 Kinect RGB 相机)转换为 Base64 字符串格式,然后将字符串传递给客户端。在客户端,我很困惑如何在画布上显示图像?

所以,我的部分代码基本上是这样的:

private static byte[] colorPixels;

static private void InitilizeKinect()
    {
        var sensor = KinectSensor.KinectSensors.SingleOrDefault(); 

        if (sensor != null)
        {
            sensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);

            colorPixels = new byte[sensor.ColorStream.FramePixelDataLength];

            sensor.ColorFrameReady += SensorColorFrameReady;

            sensor.Start();
        }
}

static void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
    {

        if (!_serverInitialized) return;

        using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {
            if (colorFrame != null)
            {
                colorFrame.CopyPixelDataTo(colorPixels);

                String json = Convert.ToBase64String(colorPixels);
                foreach (var socket in _clients)
                {
                    socket.Send(json);
                }

            }
        }
    }

我将颜色流帧字节数组转换为 Base64 字符串,以便使用 JSON 将其传递到客户端。没有错误,我可以运行服务器,客户端也可以接收连接,但画布什么也不显示。我不知道如何填充图像源。

这是我的 javascript 的一部分:

 socket.onmessage = function (event) {
    if (typeof event.data === "string") {
        status.innerHTML = "Kinect RGB received.";

        // Get the data in JSON format.
        var jsonObject = JSON.parse(event.data);

    var img = new Image();
    img.onload = function () {
    context.drawImage(img, 0, 0);
    }
    img.src = ??????

    }
};

任何相关的答案将不胜感激。谢谢! :D

【问题讨论】:

标签: json html base64 byte


【解决方案1】:

这应该可行:

socket.onmessage = function (event) {
    if (typeof event.data === "string") {
        status.innerHTML = "Kinect RGB received.";

        // Get the data in JSON format.
        var jsonObject = JSON.parse(event.data);

        var img = new Image();
        img.onload = function () {
            context.drawImage(img, 0, 0);
        }
        img.src = "data:image/  png;base64," + jsonObject.REPLACETHIS;
        // you have to replace 'REPLACETHIS' by the name of your base64 image data
    }
};

【讨论】:

  • 感谢您的回答!顺便说一句,我怎么知道 base64 图像数据的名称?因为我通过了 Kinect 摄像头的图像。
  • 我明白了~嗯..我的意思是这个“你必须用你的base64图像数据的名称替换'REPLACETHIS'”这是什么意思?
  • 你如何接收你的图像?
  • 来自 Kinect 相机。所以,我有 colorPixels 作为字节数组。它从 colorFrame.CopyPixelDataTo(colorPixels) 接收数据。然后我将此帧字节数组转换为 Base64 字符串并使用 json 发送。所以现在我想在画布上显示它。实际上我正在做的是从 Kinect RGB 相机进行直播。我通过研究达到了这个解决方案。我还阅读了有关位图的信息,但无法在网络浏览器上显示图像/视频。
  • 所以用你从服务器收到的json格式的字符串替换'REPLACETHIS'
猜你喜欢
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多