UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

70 lines (61 loc) 2.19 kB
import _slicedToArray from '@babel/runtime/helpers/slicedToArray'; import vtkImageData from '../DataModel/ImageData.js'; import vtkDataArray from './DataArray.js'; /** * Takes a canvas and converts it to a vtkImageData. * * Optionally supply a bounding box to get a particular subset of the canvas. * * @param canvas The HTML canvas to convert * @param boundingBox A bounding box of type [top, left, width, height] */ function canvasToImageData(canvas) { var boundingBox = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0]; var _boundingBox = _slicedToArray(boundingBox, 4), top = _boundingBox[0], left = _boundingBox[1], width = _boundingBox[2], height = _boundingBox[3]; var ctxt = canvas.getContext('2d'); var idata = ctxt.getImageData(top, left, width || canvas.width, height || canvas.height); var imageData = vtkImageData.newInstance({ type: 'vtkImageData' }); imageData.setOrigin(0, 0, 0); imageData.setSpacing(1, 1, 1); imageData.setExtent(0, (width || canvas.width) - 1, 0, (height || canvas.height) - 1, 0, 0); var scalars = vtkDataArray.newInstance({ numberOfComponents: 4, values: new Uint8Array(idata.data.buffer) }); scalars.setName('scalars'); imageData.getPointData().setScalars(scalars); return imageData; } /** * Converts an Image object to a vtkImageData. */ function imageToImageData(image) { var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { flipX: false, flipY: false, rotate: 0 }; var canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; var ctx = canvas.getContext('2d'); var flipX = transform.flipX, flipY = transform.flipY, rotate = transform.rotate; ctx.translate(canvas.width / 2, canvas.height / 2); ctx.scale(flipX ? -1 : 1, flipY ? -1 : 1); ctx.rotate(rotate * Math.PI / 180); ctx.drawImage(image, -image.width / 2, -image.height / 2); return canvasToImageData(canvas); } var ImageHelper = { canvasToImageData: canvasToImageData, imageToImageData: imageToImageData }; export { ImageHelper as default };