假设我有一个大小为900x900的HTML5画布元素。
我有一个名为computeRow的函数,它接受一个参数,即网格上某一行的数字,并返回由900个数字组成的数组。每个数字代表0到200之间的数字。还有一个名为colors的数组,其中包含类似于rgb(0,20,20)的字符串数组。
基本上,我的意思是,我有一个函数逐像素地告诉给定行上每个像素的颜色应该是什么。运行此函数多次,我可以计算出画布上每个像素的颜色。
运行computeRow 900次的过程大约需要0.5秒钟。
然而,绘制图像所需的时间比这要长得多。
我编写了一个名为drawRow的函数,它以900个数字的数组作为输入并在画布上绘制它们。相比computeRow,drawRow需要更长的运行时间!我该如何解决?
drawRow非常简单。它看起来像这样:
我有一个名为computeRow的函数,它接受一个参数,即网格上某一行的数字,并返回由900个数字组成的数组。每个数字代表0到200之间的数字。还有一个名为colors的数组,其中包含类似于rgb(0,20,20)的字符串数组。
基本上,我的意思是,我有一个函数逐像素地告诉给定行上每个像素的颜色应该是什么。运行此函数多次,我可以计算出画布上每个像素的颜色。
运行computeRow 900次的过程大约需要0.5秒钟。
然而,绘制图像所需的时间比这要长得多。
我编写了一个名为drawRow的函数,它以900个数字的数组作为输入并在画布上绘制它们。相比computeRow,drawRow需要更长的运行时间!我该如何解决?
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);
}
}
createImageData()
的更多信息,请参见此处:https://developer.mozilla.org/zh-CN/docs/Web/API/CanvasRenderingContext2D/createImageData - argon