Я пытаюсь обновить ImageData контекста изображения Canvas, и когда я пытаюсь установить элементы в массиве данных, я получаю сообщение об ошибке, в котором говорится, что массив имеет тип Js.Typed_array.Uint8ClampedArray.t
, когда что-то ожидается array('a)
.
Почему я не могу обновить реализацию JS TypedArray?
Вот мой код компонента (несколько упрощенный для ясности):
let make = _children => {
let map = FeatureMap.make(100, 100);
let (width, height) = map.dimensions;
{...component,
initialState: () => {
map: map,
canvasRef: ref(None)
},
didMount: self => switch (self.state.canvasRef^) {
| None => ()
| Some(canvas) => {
let ctx = getContext2d(canvas);
let imageData = createImageDataCoords(ctx, ~width=float_of_int(width), ~height=float_of_int(height));
let data = Webapi.Dom.Image.data(imageData);
Array.iteri((x, row) => {
Array.iteri((y, weight) => {
let index = (x * width + y) * 4;
let (r, g, b) = weight;
data[index + 0] = r;
data[index + 1] = g;
data[index + 2] = b;
data[index + 3] = 0;
}, row);
}, map.weights);
ctx |> putImageData(imageData, 0., 0., 0., 0., float_of_int(width), float_of_int(height));
}
},
render: _self => <canvas id="weight-map"
width={string_of_int(width)}
height={string_of_int(width)}
ref={_self.handle(setCanvasRef)}></canvas>
};
};