bng.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435
  1. function setImageDataToCanvas(imageData, canvasId)
  2. {
  3. let canvas = document.getElementById(canvasId);
  4. canvas.width = imageData.width;
  5. canvas.height = imageData.height;
  6. let context = canvas.getContext("2d");
  7. context.putImageData(imageData, 0, 0);
  8. }
  9. async function bng(imageFileName) {
  10. // TODO(#4): keep bng.wasm as a byte array of bng.js
  11. let bngFile = await fetch(imageFileName);
  12. let fileData = await bngFile.arrayBuffer();
  13. // TODO(#5): allocate WebAssembly memory based on the file size
  14. let memory = new WebAssembly.Memory({initial: 300, maximum: 1000});
  15. new Uint8Array(memory.buffer).set(new Uint8Array(fileData));
  16. let bngProgram = await WebAssembly.instantiateStreaming(
  17. fetch("bng.wasm"),
  18. { js: { mem: memory, print: arg => console.log(arg) } });
  19. let offset = bngProgram.instance.exports.bng_offset();
  20. let size = bngProgram.instance.exports.bng_size();
  21. let width = bngProgram.instance.exports.bng_width();
  22. let height = bngProgram.instance.exports.bng_height();
  23. let unprocessedImageData = new ImageData(
  24. new Uint8ClampedArray(memory.buffer).slice(offset, offset + size), width, height);
  25. setImageDataToCanvas(unprocessedImageData, "bng-unprocessed");
  26. bngProgram.instance.exports.bng_process();
  27. let processedImageData = new ImageData(
  28. new Uint8ClampedArray(memory.buffer).slice(offset, offset + size), width, height);
  29. setImageDataToCanvas(processedImageData, "bng-processed");
  30. }
  31. bng("tsodinw.bng").catch((e) => console.log(e));