【发布时间】:2015-07-20 04:32:45
【问题描述】:
我正在使用画布控件。 我使用图像元素在图像 onload 事件上将图像绘制到画布上。
我正在寻找是否可以通过不先加载到图像元素并直接将图像定位到canavs来提高性能。
这个可以吗?
这是我当前的代码:
desktopImage.src = "/Media/FrameHandler.ashx?camIndex=" + camIndex;
desktopImage.onload = function () {
ctxLiveViews.drawImage(desktopImage, 0, 0);
}
我一直在玩这个代码,但 blob 需要一个 ArrayBuffer:
var blob = new Blob('data:image/jpeg;base64,' + jpeg, { type: "image/jpeg" });
var url = (URL || webkitURL).createObjectURL(blob);
(URL || webkitURL).revokeObjectURL(url);
修改代码:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://127.0.0.1/Media/FrameHandler.ashx?camIndex=' + camIndex, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
var uInt8Array = new Uint8ClampedArray(this.response);
imageData[camIndex].data.set(uInt8Array);
ctxLiveViews[camIndex].putImageData(imageData[camIndex], 0, 0);
};
xhr.send();
通用处理程序:
public void ProcessRequest(HttpContext context)
{
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
context.Response.ContentType = "image/jpeg";
var camIndex = Convert.ToInt16(context.Request.QueryString["camIndex"]);
context.Response.BinaryWrite( Shared.Feeder[camIndex].JpegData);
}
图像输出:
【问题讨论】:
-
Idk 无论如何都会这样做,但您的
desktopImage变量应该是var desktopImage = new Image()并在设置desktop.src之前添加onload -
@Edwin,嗨,谢谢。它在其他地方被声明为图像,因为它是一个全局变量
-
我不明白你为什么不想使用图像元素,你知道你不必将它附加到文档中吗?
-
Edwin 我想看看我是否可以删除一条处理线以加快加载图像的时间。正如我发现最好的使用是图像控制。我只需要知道替代方案:)
标签: javascript image-processing html5-canvas