image-js
Version:
Image processing and manipulation in JavaScript
60 lines (53 loc) • 1.59 kB
text/typescript
import type { BitValue, Mask } from '../Mask.js';
import type { Point } from '../utils/geometry/points.js';
import { maskToOutputMask } from '../utils/getOutputImage.js';
import { checkPointIsInteger } from '../utils/validators/checkPointIsInteger.js';
export interface PaintMaskOnMaskOptions {
/**
* Top-left corner of the mask relative to a parent image.
* @default `{row: 0, column: 0}`
*/
origin?: Point;
/**
* Value with which to set the pixel.
* @default `1`
*/
value?: BitValue;
/**
* Mask to which to output.
*/
out?: Mask;
}
/**
* Paint a mask onto an image and the given position and with the given color.
* @param image - Image on which to paint the mask.
* @param mask - Mask to paint on the image.
* @param options - Paint mask options.
* @returns The painted image.
*/
export function paintMaskOnMask(
image: Mask,
mask: Mask,
options: PaintMaskOnMaskOptions = {},
): Mask {
const { origin = { row: 0, column: 0 }, value = 1 } = options;
const { column, row } = origin;
checkPointIsInteger(origin, 'Origin');
const result = maskToOutputMask(image, options, { clone: true });
for (
let currentRow = Math.max(row, 0);
currentRow < Math.min(mask.height + row, image.height);
currentRow++
) {
for (
let currentColumn = Math.max(column, 0);
currentColumn < Math.min(mask.width + column, image.width);
currentColumn++
) {
if (mask.getBit(currentColumn - column, currentRow - row)) {
result.setBit(currentColumn, currentRow, value);
}
}
}
return result;
}