In the module GHCJS.DOM.JSFFI.Generated.CanvasRenderingContext2D there is the function putImageData
with the following type:
putImageData ::
Control.Monad.IO.Class.MonadIO m =>
CanvasRenderingContext2D
-> Maybe GHCJS.DOM.Types.ImageData -> Float -> Float -> m ()
The second parameter has the type Maybe GHCJS.DOM.Types.ImageData
.
This type is defined in the module GHCJS.DOM.Types as a newtype wrapper around a JSVal value:
newtype ImageData = ImageData {unImageData :: GHCJS.Prim.JSVal}
I have a value of type ByteString
that has always 4 bytes with the RGBA values of each pixel. How to I convert my ByteString value to a GHCJS.Prim.JSVal?
As K.A. Buhr pointed out, after converting the
ByteString
to aUint8ClampedArray
, you can pass the clamped array tonewImageData
to get the desiredImageData
object.You can use an inline Javascript function to generate the
Uint8ClampedArray
. To pass aByteString
through the Javascript FFI, useData.ByteString.useAsCStringLen
.The code below shows how to do this.
Here's a link to a repository with the example code: https://github.com/dc25/stackOverflow__how-to-convert-a-bytestring-value-to-a-jsval
Here's a link to a live demo : https://dc25.github.io/stackOverflow__how-to-convert-a-bytestring-value-to-a-jsval/