image-js
Version:
Image processing and manipulation in JavaScript
46 lines (42 loc) • 1.24 kB
text/typescript
import { line } from 'bresenham-zingl';
import type { Mask } from '../Mask.js';
import type { Point } from '../utils/geometry/points.js';
import { maskToOutputMask } from '../utils/getOutputImage.js';
export interface DrawLineOnMaskOptions {
/**
* Origin of the line relative to a parent image (top-left corner).
* @default `{row: 0, column: 0}`
*/
origin?: Point;
/**
* Mask to which the result has to be put.
*/
out?: Mask;
}
/**
* Draw a line defined by two points onto a mask.
* @param mask - Mask to process.
* @param from - Line starting point.
* @param to - Line ending point.
* @param options - Draw Line options.
* @returns The mask with the line drawing.
*/
export function drawLineOnMask(
mask: Mask,
from: Point,
to: Point,
options: DrawLineOnMaskOptions = {},
): Mask {
const { origin = { column: 0, row: 0 } } = options;
const newMask = maskToOutputMask(mask, options, { clone: true });
line(
Math.round(origin.column + from.column),
Math.round(origin.row + from.row),
Math.round(origin.column + to.column),
Math.round(origin.row + to.row),
(column: number, row: number) => {
newMask.setVisiblePixel(column, row, [1]);
},
);
return newMask;
}