Asp.net 将umat或内存中的图像发送到web客户端并以html显示

Asp.net 将umat或内存中的图像发送到web客户端并以html显示,asp.net,.net,typescript,aurelia,emgucv,Asp.net,.net,Typescript,Aurelia,Emgucv,我有一个aurelia客户端,它通过API从asp.net服务器获取一个映像。图像存储为png文件,并在api调用完成时加载 这工作正常,但图像来自通过Emgu cv获取图像的网络摄像头 我的问题是,是否可以直接提供当前的Umat/Mat图像并将其显示在网页上 HttpResponseMessage response = new HttpResponseMessage(); try { Console.WriteLine("Get image

我有一个aurelia客户端,它通过API从asp.net服务器获取一个映像。图像存储为png文件,并在api调用完成时加载

这工作正常,但图像来自通过Emgu cv获取图像的网络摄像头

我的问题是,是否可以直接提供当前的Umat/Mat图像并将其显示在网页上

 HttpResponseMessage response = new HttpResponseMessage();
        try
        {

         Console.WriteLine("Get image 3");
        manager.sem.WaitOne();

        // Maybe firsto to Emgu cv Umat to .net Image (bitmap?)
        // Then image to byte.memory stream
        // Send

        Image<Bgr, Byte> myImage = new Image<Bgr, Byte>(ddEngine.ResultImage.Bitmap);

        response.Content =
            new StreamContent(new MemoryStream(opencvCam.ResultImage.Bytes));
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");


        manager.sem.Release();
    }
    catch
    {
        Console.WriteLine("ex");
    }
还有html

    <img id="img" src.bind="imagePath"/> 


该页面不显示任何图像。

我找到了一个解决方案,首先从Umat/mat获取位图。然后制作一个内存流。以所需的图像格式(本例中为png)将图像保存到创建的memorystream中。接下来,使用流创建字节数组,并将创建的字节数组放入HTTPResponseMessage的content属性中。还可以将内容类型设置为图像类型,在我的例子中是png

这样,就不会将实际映像写入磁盘,而是将其保存在服务器应用程序的堆中

    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("dummymethod3")]
    public HttpResponseMessage Get2()
    {
        HttpResponseMessage response = new HttpResponseMessage();
        try
        {
            Console.WriteLine("Get image 3");
            ddEngine.sem.WaitOne();
            var result = new HttpResponseMessage(HttpStatusCode.OK);

            image = ResultImage.Bitmap;
            var memoryStream = new MemoryStream();
            image.Save(memoryStream, ImageFormat.Png);
            result.Content = new ByteArrayContent(memoryStream.ToArray());
            result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

            ddEngine.sem.Release();

            return result;
        }
        catch
        {
            Console.WriteLine("Ex");
        }

        return response;
    }

我看你已经有了一个关于使用

result.Content = new ByteArrayContent(memoryStream.ToArray());
我不认为转换为阵列是最有效的方法(您应该看到较大图像的性能下降)

我的建议是使用StreamContent。您的代码需要稍作更改:

[System.Web.Http.HttpGet]
[System.Web.Http.Route("dummymethod3")]
public HttpResponseMessage Get2()
{
    HttpResponseMessage response = new HttpResponseMessage();
    try
    {
        Console.WriteLine("Get image 3");
        ddEngine.sem.WaitOne();

        var memoryStream = new MemoryStream();
        ResultImage.Bitmap.Save(memoryStream, ImageFormat.Png);
        memoryStream.Position = 0;

        var result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(memoryStream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        ddEngine.sem.Release();

        return result;
    }
    catch
    {
        Console.WriteLine("Ex");
    }

    return response;
}

您是否验证了服务器端代码是否正常工作?如果没有,首先在标记中硬编码URL:谢谢你的评论,我会在几个小时后尝试。我认为问题也确实出在服务器上。umat/mat到图像及其发送之间的转换。问题是当前的解决方案是将umat图像转换并存储为png,然后再次读取。但我不想把它保存在磁盘上。在服务器上,我希望它保持在堆上。谢谢你的评论,我将在明天检查这个!
[System.Web.Http.HttpGet]
[System.Web.Http.Route("dummymethod3")]
public HttpResponseMessage Get2()
{
    HttpResponseMessage response = new HttpResponseMessage();
    try
    {
        Console.WriteLine("Get image 3");
        ddEngine.sem.WaitOne();

        var memoryStream = new MemoryStream();
        ResultImage.Bitmap.Save(memoryStream, ImageFormat.Png);
        memoryStream.Position = 0;

        var result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(memoryStream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        ddEngine.sem.Release();

        return result;
    }
    catch
    {
        Console.WriteLine("Ex");
    }

    return response;
}