UNPKG

pixel-utils

Version:
113 lines (112 loc) 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = fit; var _xdim = require("xdim"); var _rawToRgba = _interopRequireDefault(require("../raw-to-rgba")); var _selectPixel = _interopRequireDefault(require("../select-pixel")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // fit raw bands to 8-bit color space // while slicing and scaling as necessary function fit({ data, debug_level = 0, depth, flip = false, old_no_data_value, old_layout, no_data_strategy = "partial", // png strategy no_range_value, no_range_value_strategy = "top", new_layout = "[row,column,band]", new_no_data_value, height, ranges, width }) { if (!ranges) throw new Error("[expand] can't expand without ranges"); if (debug_level >= 1) console.log("[stretch] starting fit"); if (typeof height !== "number") throw new Error("[fit] height must be a number"); if (typeof width !== "number") throw new Error("[fit] height must be a number"); if (typeof old_layout !== "string") throw new Error("[fit] old_layout must be a string"); if (typeof new_layout !== "string") throw new Error("[fit] new_layout must be a string"); const select = (0, _selectPixel.default)(data, { depth, height, layout: old_layout, width }); const out_sizes = { band: 4, row: height, column: width }; const { data: out_data } = (0, _xdim.prepareData)({ fill: new_no_data_value, layout: new_layout, sizes: out_sizes }); const convert = (0, _rawToRgba.default)({ debug_level: debug_level - 1, format: "array", flip, ranges, new_no_data_value: new_no_data_value, no_data_strategy: no_data_strategy, no_range_value: no_range_value, no_range_value_strategy: no_range_value_strategy, old_no_data_value }); const update = (0, _xdim.prepareUpdate)({ data: out_data, layout: new_layout, sizes: out_sizes }); for (let row = 0; row < height; row++) { for (let column = 0; column < width; column++) { const [r, g, b, a] = convert(select(row, column)); update({ point: { band: 0, row, column }, value: r }); update({ point: { band: 1, row, column }, value: g }); update({ point: { band: 2, row, column }, value: b }); update({ point: { band: 3, row, column }, value: a }); } } if (debug_level >= 1) console.log("[pixel-utils/fit] out_data:", out_data); return { // @ts-ignore data: out_data, layout: new_layout }; }