gpt4 book ai didi

javascript - 我可以在不使用图像元素的情况下将图像直接加载到 Canvas 上吗

转载 作者:行者123 更新时间:2023-12-03 10:10:28 25 4
gpt4 key购买 nike

我正在使用 Canvas 控件。我使用 image 元素在图像 onload 事件上将图像绘制到 Canvas 上。

我想看看是否可以通过不先加载到图像元素并直接将图像定位到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);
}

图像输出:

enter image description here

最佳答案

下面是一种直接将图像数据加载到 Canvas 上的方法,而不考虑数据是否正确绘制:

var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
document.body.appendChild(canvas);
var imageData = ctx.getImageData(0, 0, 256, 256);

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://fiddle.jshell.net/img/logo.png', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
var uInt8Array = new Uint8ClampedArray(this.response);
imageData.data.set(uInt8Array);
ctx.putImageData(imageData, 0, 0);
};

xhr.send();

jsfiddle

如果您想获取blob:

xhr.onload = function (e) {
var uInt8Array = new Uint8Array(this.response);
var blob = new Blob([ uInt8Array ], { type: "image/png" });
var urlCreator = window.URL || window.webkitURL;
var url = urlCreator.createObjectURL(blob);
};

关于javascript - 我可以在不使用图像元素的情况下将图像直接加载到 Canvas 上吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30137717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com