4

我正在尝试在 HTML 画布上可视化一些数据,并且遇到了与此类似的问题。也就是说,我的数据大小与我的画布大小不完全匹配。

在一个例子中,我想在 100px 宽的画布上绘制一个 1024 点信号。(例如,音频波形。)

在另一个例子中,我想在 100 像素高 x 500 像素宽的画布上显示 1024 x 5000 点矩阵。(例如,音频频谱图。)

在这两种情况下,我都需要重新采样我的数据以使其适合画布。有谁知道 Javascript 中的库/工具包/函数可以做到这一点?

** 编辑 **

我知道我可以在这里使用很多技术。一种可能性是简单地丢弃或复制数据点。这将在紧要关头完成,但众所周知,丢弃/复制会产生看起来“锯齿状”或“块状”的结果(参见此处此处)。我更喜欢使用稍微复杂一点的算法来输出更平滑的图像,例如Lanczos双线性双三次重采样。这些中的任何一个都可以满足我的需求。

不过,我的问题不是关于使用哪种算法,而是关于它们中的任何一个是否已在开源 javascript 库中实现。令人惊讶的是,我在 JS 中找不到太多东西。编写我自己的重采样函数显然是一种选择,但我想先咨询 SO 社区,以确保我没有重新发明轮子。

这个答案给出了一个非常接近我想要的代码列表,除了它直接在画布对象而不是数据数组上操作,它强制输入和输出的纵横比相同。如果没有别的可用,我绝对可以使用它,但我希望有一个更通用和灵活的解决方案,类似于 Matlab 的resample。)

4

1 回答 1

1

使用画布比例

ctx.scale(xscale,yscale);

您可以通过计算画布和数据之间的比率来确定缩放比例

ctx.scale(canvas_x/data_x,canvas_y/data_y)
于 2012-06-29T22:17:24.937 回答