我正在尝试更新Canvas图像上下文的ImageData,并且当我尝试在数据数组中设置元素时,我收到一条错误消息,表示在预期{{1}时该数组的类型为.gradient {
align-items: flex-end;
display: flex;
flex-basis: 0;
flex-grow: 1;
background: linear-gradient(to right, rgba(195, 32, 52, 0.83) 0%, rgba(36, 11, 54, 0.83) 100%);
width: 300px;
height: 300px;
.image {
align-items: flex-end;
background-image: url(https://huish.landoncall.com/wp-content/uploads/2019/03/emily-jacobsen.jpg);
background-size: cover;
display: flex;
height: 100%;
width: 100%;
h2 {
color: white;
display: none;
padding-left: 20px;
}
&:hover {
opacity: 0.2;
transition: opacity ease-in 0.7s;
h2 {
display: initial;
}
}
}
}
}。
为什么我不能更新JS TypedArray实现?
这是我的组件代码(为清晰起见,进行了一些简化):
Js.Typed_array.Uint8ClampedArray.t
答案 0 :(得分:3)
对于编译器来说,array('a)
与Js.Typed_array.Uint8ClampedArray.t
的类型不同,因此它们的操作(包括索引编制)不可互换。这与不能添加int和float的原理相同。
要设置类型化数组元素,您需要查找(或编写)绑定,使您可以显式地执行此操作,而不是使用索引运算符。为此,您可以查看Js.Typed_array
模块-有一个module type S
,我们可以说这意味着“所有类型的数组模块都必须符合此模块签名”。包括Js.Typed_array.Uint8ClampedArray
模块。因此,您可以使用S
模块类型的unsafe_set
函数来设置类型化数组元素,因为Js.Typed_array.Uint8ClampedArray
实现了它:
let module UI8s = Js.Typed_array.Uint8ClampedArray;
UI8s.unsafe_set(data, index, r);
UI8s.unsafe_set(data, index + 1, g);
UI8s.unsafe_set(data, index + 2, b);
UI8s.unsafe_set(data, index + 3, 0);