javascript - 在 JavaScript 中按值复制 imageData

标签 javascript html canvas reference

在我的应用程序中,我有一个处理 Canvas ImageData 的函数。它看起来像这样:

function processData(imagedata, filters) {
  var data = imagedata.data;
  //manipulate data with filters
  imageData.data = data;
  return imageData;
}

我一直这样使用它:

var imageData = processData(imageData, {...});

但是因为 imageData 对象是通过引用传递的,所以它也将像这样工作:

processData(imageData, {...}); // no assignment

我在我的项目中遇到了一个问题,我需要能够在处理一些图像数据的同时仍然可以访问原始数据。我的第一次尝试类似于以下内容:

var originalData = imageData;
var processedData = processData(imageData, {...});

这当然会导致相同的图像数据。

所以我的第二个想法是编辑 processsData 函数,以便它以某种方式操作 imageData 的副本,而不是传递的 imageData。我为此所做的所有尝试都失败了,或者效率极低。只是想知道是否有特殊的方法可以做到这一点。提前致谢。

最佳答案

根据latest specification ImageData 对象 data 属性被初始化为 Uint8ClampedArray对象(而不是之前使用的 CanvasPixelArray 对象),因此可以使用 set 方法轻松复制 ImageData 中的数据:

function copyImageData(ctx, src)
{
    var dst = ctx.createImageData(src.width, src.height);
    dst.data.set(src.data);
    return dst;
}

关于javascript - 在 JavaScript 中按值复制 imageData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642383/

相关文章:

c# - 如何实现工作空间的小 map ?

javascript - 如何使用 Anime.js 在 HTML Canvas 中旋转矩形

javascript - Function 对象和 ES 模块的范围问题

javascript - 如何在 Vuejs 中使用计算来观看深度数组

javascript - 放置网页部分的灯箱

html - 如何创建纯文本按钮?

php - 如何选择默认值下拉菜单

javascript - 如何从用户输入中拆分逗号分隔的字符串

javascript - 如果选择选项是 ""想要使用 javascript 三元组,则需要显示空

javascript - 无法在 Fabric Js 中按线路连接端点