首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >双线性插值函数太慢- Javascript

双线性插值函数太慢- Javascript
EN

Stack Overflow用户
提问于 2018-07-06 06:44:12
回答 1查看 949关注 0票数 0

我有一个电子应用程序,我通过串口从相机接收一些数据,然后使用画布显示。

我想使用双线性插值,因为收到的数据只有64个像素。我的问题是插值函数太慢了,它不能保持它与通过串行接收的数据,因此它滞后,不再是实时的。

你知道我能做些什么来让它更快吗?下面是函数:

代码语言:javascript
复制
let imgData = ctx.getImageData(0, 0, width, height);
let data = imgData.data;
for i {
  for j {
    //The size of a block is 64 pixels
    let indexX = Math.floor(j / (64 * 4));
    let indexY = Math.floor(i / 64);

    let Q11 = {
      x: index_X * 64,
      y: index_Y * 64,
      value: parseFloat(PixelData[indexX + indexY * 16])
    };

    let Q12 = {
      x: index_X * 64,
      y: (index_Y + 1) * 64,
      value: parseFloat(PixelData[indexX + (indexY + 1) * 16])
    };

    let Q21 = {
      x: (index_X + 1) * 64,
      y: index_Y * 64,
      value: parseFloat(PixelData[(indexX + 1) + indexY * 16])
    };

    let Q22 = {
      x: (index_X + 1) * 64,
      y: (index_Y + 1) * 64,
      value: parseFloat(PixelData[(indexX + 1) + (indexY + 1) * 16])
    };

    let R1 = Q11.value * ((Q21.x - (j / 4)) / 64) + Q21.value * (((j / 4) - Q11.x) / 64);
    let R2 = Q12.value * ((Q22.x - (j / 4)) / 64) + Q22.value * (((j / 4) - Q12.x) / 64);
    let MLXTempInterpolated = R1 * ((Q12.y - i) / 64) + R2 * ((i - Q21.y) / 64);
    let tempIndex = TempMap(MLXTempInterpolated, minTemp, maxTemp, 120) //This is pretty fast
    try {

      data[j + i * ((64 * 15 + 1) * 4) + 0] = colorPalette[tempIndex].r //r
      data[j + i * ((64 * 15 + 1) * 4) + 1] = colorPalette[tempIndex].g //g
      data[j + i * ((64 * 15 + 1) * 4) + 2] = colorPalette[tempIndex].b //b
      data[j + i * ((64 * 15 + 1) * 4) + 3] = 255 //alfa

    } catch (err) {
      //console.log(err)
    }

  } //for j
} // for i
// put the modified pixels back on the canvas
ctx.putImageData(imgData, 0, 0);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-06 08:59:42

把它画到另一个画布上不会为你做双线性插值吗?

代码语言:javascript
复制
var canvas2 = document.createElement('canvas');
var ctx2 = canvas2.getContext('2d');
canvas2.width = canvas2.height = 1024;
ctx2.drawImage( canvas, 0, 0, 1024, 1024 );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51200831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档