gpt4 book ai didi

javascript - canvas.toDataURL() 不是函数 - 错误 node-webGL 包装器

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

目前我正在尝试将基于浏览器的客户端体积渲染代码转换为服务器端基于纯 JavaScript 的渲染。

我在服务器端使用node-webgl。我的主要目标是将服务器的 Canvas 内容发送到客户端,然后将此图像数据显示在客户端上。

但在此之前我需要检查渲染是否正确。所以我使用canvas.toDataURL()来提取 Canvas 数据并希望将其显示在单独的窗口上。但我面临着错误。

下面是我的代码:

exp.js

var nodejs=true,
WebGL = require('./node_modules/node-webgl/index'),
document = WebGL.document();

document.setTitle("Lesson02");
requestAnimationFrame = document.requestAnimationFrame;
alert=console.error;

//Read and eval library
fs=require('fs');
eval(fs.readFileSync(__dirname+ '/sylvester.js','utf8'));
eval(fs.readFileSync(__dirname+ '/glUtils.js','utf8'));
eval(fs.readFileSync(__dirname+ '/glAux.js','utf8'));
eval(fs.readFileSync(__dirname+ '/volumercserver.js','utf8'));

volumerc_main('./raycast-color.frag','./aorta-high512.jpg','./tfold.png');

volumerc_main包含在volumercserver.js中(这里只包含必需的代码)

var Image = require("node-webgl").Image;

var canvas = document.createElement("canvas");
canvas.id = 'canvas_win';
canvas.width= 512;
canvas.height= 512;
var gl;

var canvas1 = document.createElement("canvas");
canvas1.width= 512;
canvas1.height= 512;
var ctx = canvas1.getContext('2d');

try {
gl = canvas.getContext("webgl", {premultipliedAlpha: false}) || canvas.getContext("experimental-webgl",{premultipliedAlpha: false});
} catch (e) {
}
if (!gl) {
alert("Could not initialise WebGL, sorry :-(");
}

// All computations take place here
//................
//..................
//.............

var dataURLstring = canvas.toDataURL();

var img1 = new Image;
img1.src = dataURLstring;
// img1.onload = function(){
ctx.drawImage(img1,0,0); // Or at whatever offset you like
// };

现在,当我运行 node npm.js 时,我收到错误,

C:\Users\z003npra\Desktop\node>node exp.js
Status: Using GLEW 1.13.0
Status: Using GLEW 1.13.0
undefined:443
var dataURLstring = canvas.toDataURL();
^

TypeError: canvas.toDataURL is not a function
at drawVolume (eval at <anonymous> (C:\Users\z003npra\Desktop\node\exp.js:15
:9), <anonymous>:443:30)
at Timer.listOnTimeout (timers.js:92:15)

在 toDataURL() 出现错误之前的 Canvas 日志

{ type: 'nodeGLFW',
ratio: 1,
setTitle: [Function],
setIcon: [Function],
flip: [Function],
getElementById: [Function],
createElement: [Function],
createWindow: [Function],
getContext: [Function],
on: [Function],
addEventListener: [Function],
removeEventListener: [Function],
requestAnimationFrame: [Function],
drawingBufferWidth: 800,
width: 512,
drawingBufferHeight: 800,
height: 512,
canvas: [Circular],
id: 'canvas_win',
onmousedown: [Function: handleMouseDown],
onmouseup: [Function: handleMouseUp],
onmousemove: [Function: handleMouseMove] }

请帮我解决这个问题。

最佳答案

.toDataURL() 函数未在 node-webGL 包装器中定义。另一种方法是使用 gl.readPixels (由该组成员建议)。

这里是使用方法。

var pixels = new Uint8Array(canvas.width * canvas.height * 4);
gl.readPixels(0, 0, canvas.width, canvas.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);

执行gl.readPixels后,缓冲区数据以像素为单位。数据为 ImageData() 格式。有了这些数据,就可以完成进一步所需的处理。

关于javascript - canvas.toDataURL() 不是函数 - 错误 node-webGL 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39591877/

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