gpt4 book ai didi

javascript - 如何在 HTML5 Canvas 上逐像素绘制

转载 作者:太空狗 更新时间:2023-10-29 13:40:18 26 4
gpt4 key购买 nike

假设我有一个 900x900 的 HTML5 Canvas 元素。

我有一个名为 computeRow 的函数,它接受网格上行的编号作为参数,并返回一个包含 900 个数字的数组。每个数字代表 0 到 200 之间的一个数字。有一个名为 colors 的数组,其中包含一个字符串数组,例如 rgb(0,20,20)

基本上,我的意思是我有一个函数可以逐个像素地告诉 Canvas 上给定行中的每个像素应该是什么颜色。多次运行此函数,我可以计算 Canvas 上每个像素的颜色。

运行computeRow 900次的过程大约需要0.5秒。

然而,图像的绘制时间比这长得多。

我所做的是,我编写了一个名为 drawRow 的函数,它将一个包含 900 个数字的数组作为输入并将它们绘制在 Canvas 上。 drawRow 的运行时间比 computeRow 长得多!我该如何解决这个问题?

drawRow 非常简单。它看起来像这样:

function drawRow(rowNumber, result /* array */) {
var plot, context, columnNumber, color;
plot = document.getElementById('plot');
context = plot.getContext('2d');
// Iterate over the results for each column in the row, coloring a single pixel on
// the canvas the correct color for each one.
for(columnNumber = 0; columnNumber < width; columnNumber++) {
color = colors[result[columnNumber]];
context.fillStyle = color;
context.fillRect(columnNumber, rowNumber, 1, 1);
}
}

最佳答案

我不确定你到底想做什么,所以如果我错了,我深表歉意。

如果您尝试为 Canvas 上的每个像素写入一种颜色,您可以这样做:

var ctx = document.getElementById('plot').getContext('2d');
var imgdata = ctx.getImageData(0,0, 640, 480);
var imgdatalen = imgdata.data.length;
for(var i=0;i<imgdatalen/4;i++){ //iterate over every pixel in the canvas
imgdata.data[4*i] = 255; // RED (0-255)
imgdata.data[4*i+1] = 0; // GREEN (0-255)
imgdata.data[4*i+2] = 0; // BLUE (0-255)
imgdata.data[4*i+3] = 255; // APLHA (0-255)
}
ctx.putImageData(imgdata,0,0);

这比为每个像素绘制一个矩形要快得多。您唯一需要做的就是将颜色分成 rgba() 值。

关于javascript - 如何在 HTML5 Canvas 上逐像素绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20832299/

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