0

我正在开发一个 javascript 应用程序,它以 .cube 格式读取 3D 颜色查找表,解析数据并从这些值创建 ImageData 对象,最后将其应用于另一个图像。

我在将 3D CLUT 转换为 javascript 中的 imageData 对象时遇到问题。

过程是这样的:我有 .cube 格式的 3D 颜色查找表。

.cube 文件示例:

# Created by: Author.name
# some info
# another info

LUT_3D_SIZE 17

0.059631 0.016327 0.003510
0.108398 0.020386 0.004089
.
. after few thousand lines
.
0.908539 0.965302 0.953644
0.951721 0.981812 0.963562

我解析了 .cube 文件并获得了包含所有值的数组并将其放入 Uint8ClampedArray 中,因此我可以创建 ImageData 对象并最终使用 putImageData() 函数将其绘制到画布中。

代码看起来像这样:

...

var result = parseData(data);
var testCanvas = document.getElementById("testCanvas");
var ctxTest = testCanvas.getContext("2d");

var width = Math.sqrt((result.data.length/4));
var height = Math.sqrt((result.data.length/4));

var uintc8 = new Uint8ClampedArray(result.data);
var newImage = new ImageData(uintc8, width ,height);

ctxTest.putImageData(newImage,0,0);

当我尝试使用 64*64*64 大小的查找表运行此代码时,一切正常,成功创建 ImageData 并生成图像内容。但是当我尝试使用其他大小的 LUT(17 或 33 或 5...)时,我收到一个错误:

“构造‘ImageData’失败:输入数据长度不是(4 * 宽度)的倍数。”

如果我尝试更改宽度和高度值,则会出现错误:

“构造‘ImageData’失败:输入数据长度不等于(4 * 宽 * 高)。”

所以我现在有点困惑......我没有收到错误的唯一例子是当我放

var width = result.data.length; var height = 1; 但是,当然,这没有用,因为我得到了 1px 的高度......

那么,如何让它与 64*64*64 以外的 LUT 一起使用?这篇文章对我很有帮助,开始...

如何在 JavaScript 中使用 LUT?

谢谢!

4

0 回答 0