image-js
Version:
Image processing and manipulation in JavaScript
61 lines (59 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = split;
var _Stack = _interopRequireDefault(require("../../stack/Stack"));
var _Image = _interopRequireDefault(require("../Image"));
var _model = require("../model/model");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* @memberof Image
* @instance
* @param {object} [options]
* @param {boolean} [options.preserveAlpha=true]
* @return {Stack}
*/
function split(options = {}) {
let {
preserveAlpha = true
} = options;
this.checkProcessable('split', {
bitDepth: [8, 16]
});
// split will always return a stack of images
if (this.components === 1) {
return new _Stack.default([this.clone()]);
}
let images = new _Stack.default();
let data = this.data;
if (this.alpha && preserveAlpha) {
for (let i = 0; i < this.components; i++) {
let newImage = _Image.default.createFrom(this, {
components: 1,
alpha: true,
colorModel: _model.GREY
});
let ptr = 0;
for (let j = 0; j < data.length; j += this.channels) {
newImage.data[ptr++] = data[j + i];
newImage.data[ptr++] = data[j + this.components];
}
images.push(newImage);
}
} else {
for (let i = 0; i < this.channels; i++) {
let newImage = _Image.default.createFrom(this, {
components: 1,
alpha: false,
colorModel: _model.GREY
});
let ptr = 0;
for (let j = 0; j < data.length; j += this.channels) {
newImage.data[ptr++] = data[j + i];
}
images.push(newImage);
}
}
return images;
}