pixel-utils
Version:
Utility Functions for Pixels
46 lines (41 loc) • 1.75 kB
text/typescript
import { Layout } from "../enums";
import type { RawPixel, TYPED_ARRAY } from "../types";
import select_brc from "./select-pixel-from-brc";
import select_b_r_c from "./select-pixel-from-b-r-c";
import select_b_rc from "./select-pixel-from-b-rc";
import select_rcb from "./select-pixel-from-rcb";
import select_rc_b from "./select-pixel-from-rc-b";
import select_r_c_b from "./select-pixel-from-r-c-b";
import select_r_cb from "./select-pixel-from-r-cb";
export type SelectPixelFunction = (row: number, column: number) => RawPixel;
export default function selectPixel(
data: number[] | number[][] | number[][][] | TYPED_ARRAY | TYPED_ARRAY[] | TYPED_ARRAY[][],
{ depth, height, layout, width }: { depth: number; height: number; layout: Layout | string; width: number }
): SelectPixelFunction {
// console.log("layout:", {layout, data, depth, width});
switch (layout) {
case Layout["[band][row][column]"]:
// @ts-ignore
return select_b_r_c.bind(null, data, depth);
case Layout["[band][row,column]"]:
// @ts-ignore
return select_b_rc.bind(null, data, depth, width);
case Layout["[band,row,column]"]:
// @ts-ignore
return select_brc.bind(null, data, depth, height, width);
case Layout["[row,column][band]"]:
// @ts-ignore
return select_rc_b.bind(null, data, width);
case Layout["[row][column][band]"]:
// @ts-ignore
return select_r_c_b.bind(null, data);
case Layout["[row][column,band]"]:
// @ts-ignore
return select_r_cb.bind(null, data, depth);
case Layout["[row,column,band]"]:
// @ts-ignore
return select_rcb.bind(null, data, depth, width);
default:
throw new Error("[pixel-utils] unknown layout " + layout);
}
}