Files
Foundry-VTT-Docker/resources/app/node_modules/@pixi/utils/lib/media/getCanvasBoundingBox.mjs

39 lines
1.2 KiB
JavaScript
Raw Normal View History

2025-01-04 00:34:03 +01:00
import { BoundingBox } from "./BoundingBox.mjs";
function checkRow(data, width, y) {
for (let x = 0, index = 4 * y * width; x < width; ++x, index += 4)
if (data[index + 3] !== 0)
return !1;
return !0;
}
function checkColumn(data, width, x, top, bottom) {
const stride = 4 * width;
for (let y = top, index = top * stride + 4 * x; y <= bottom; ++y, index += stride)
if (data[index + 3] !== 0)
return !1;
return !0;
}
function getCanvasBoundingBox(canvas) {
const { width, height } = canvas, context = canvas.getContext("2d", {
willReadFrequently: !0
});
if (context === null)
throw new TypeError("Failed to get canvas 2D context");
const data = context.getImageData(0, 0, width, height).data;
let left = 0, top = 0, right = width - 1, bottom = height - 1;
for (; top < height && checkRow(data, width, top); )
++top;
if (top === height)
return BoundingBox.EMPTY;
for (; checkRow(data, width, bottom); )
--bottom;
for (; checkColumn(data, width, left, top, bottom); )
++left;
for (; checkColumn(data, width, right, top, bottom); )
--right;
return ++right, ++bottom, new BoundingBox(left, top, right, bottom);
}
export {
getCanvasBoundingBox
};
//# sourceMappingURL=getCanvasBoundingBox.mjs.map