image-in-browser
Version:
Package for encoding / decoding images, transforming images, applying filters, drawing primitives on images on the client side (no need for server Node.js)
67 lines • 2.48 kB
JavaScript
import { ArrayUtils } from '../../common/array-utils.js';
export class JpegFrame {
get components() {
return this._components;
}
get componentsOrder() {
return this._componentsOrder;
}
get extended() {
return this._extended;
}
get progressive() {
return this._progressive;
}
get precision() {
return this._precision;
}
get scanLines() {
return this._scanLines;
}
get samplesPerLine() {
return this._samplesPerLine;
}
get maxHSamples() {
return this._maxHSamples;
}
get maxVSamples() {
return this._maxVSamples;
}
get mcusPerLine() {
return this._mcusPerLine;
}
get mcusPerColumn() {
return this._mcusPerColumn;
}
constructor(components, componentsOrder, extended, progressive, precision, scanLines, samplesPerLine) {
this._maxHSamples = 0;
this._maxVSamples = 0;
this._mcusPerLine = 0;
this._mcusPerColumn = 0;
this._components = components;
this._componentsOrder = componentsOrder;
this._extended = extended;
this._progressive = progressive;
this._precision = precision;
this._scanLines = scanLines;
this._samplesPerLine = samplesPerLine;
}
prepare() {
for (const [_, component] of this._components) {
this._maxHSamples = Math.max(this._maxHSamples, component.hSamples);
this._maxVSamples = Math.max(this._maxVSamples, component.vSamples);
}
this._mcusPerLine = Math.ceil(this._samplesPerLine / 8 / this._maxHSamples);
this._mcusPerColumn = Math.ceil(this._scanLines / 8 / this._maxVSamples);
for (const [_, component] of this._components) {
const blocksPerLine = Math.ceil((Math.ceil(this._samplesPerLine / 8) * component.hSamples) /
this._maxHSamples);
const blocksPerColumn = Math.ceil((Math.ceil(this._scanLines / 8) * component.vSamples) / this.maxVSamples);
const blocksPerLineForMcu = this._mcusPerLine * component.hSamples;
const blocksPerColumnForMcu = this._mcusPerColumn * component.vSamples;
const blocks = ArrayUtils.generate(blocksPerColumnForMcu, (_) => ArrayUtils.generate(blocksPerLineForMcu, (_) => new Int32Array(64)));
component.setBlocks(blocks, blocksPerLine, blocksPerColumn);
}
}
}
//# sourceMappingURL=jpeg-frame.js.map