Asp.net 将umat或内存中的图像发送到web客户端并以html显示
我有一个aurelia客户端,它通过API从asp.net服务器获取一个映像。图像存储为png文件,并在api调用完成时加载 这工作正常,但图像来自通过Emgu cv获取图像的网络摄像头 我的问题是,是否可以直接提供当前的Umat/Mat图像并将其显示在网页上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
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;
}