Files
PackControl/node_modules/@elgato-stream-deck/core/dist/util.js

73 lines
3.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BMP_HEADER_LENGTH = void 0;
exports.transformImageBuffer = transformImageBuffer;
exports.writeBMPHeader = writeBMPHeader;
exports.uint8ArrayToDataView = uint8ArrayToDataView;
function transformImageBuffer(imageBuffer, sourceOptions, targetOptions, destPadding, imageWidth, imageHeight) {
const imageBufferView = uint8ArrayToDataView(imageBuffer);
const byteBuffer = new Uint8Array(destPadding + imageWidth * imageHeight * targetOptions.colorMode.length);
const byteBufferView = uint8ArrayToDataView(byteBuffer);
const flipColours = sourceOptions.format.substring(0, 3) !== targetOptions.colorMode.substring(0, 3);
for (let y = 0; y < imageHeight; y++) {
const rowOffset = destPadding + imageWidth * targetOptions.colorMode.length * y;
for (let x = 0; x < imageWidth; x++) {
// Apply x/y flips
let x2 = targetOptions.xFlip ? imageWidth - x - 1 : x;
let y2 = targetOptions.yFlip ? imageHeight - y - 1 : y;
if (targetOptions.rotate) {
// Swap x and y
const tmpX = x2;
x2 = y2;
y2 = tmpX;
}
const srcOffset = y2 * sourceOptions.stride + sourceOptions.offset + x2 * sourceOptions.format.length;
const red = imageBufferView.getUint8(srcOffset);
const green = imageBufferView.getUint8(srcOffset + 1);
const blue = imageBufferView.getUint8(srcOffset + 2);
const targetOffset = rowOffset + x * targetOptions.colorMode.length;
if (flipColours) {
byteBufferView.setUint8(targetOffset, blue);
byteBufferView.setUint8(targetOffset + 1, green);
byteBufferView.setUint8(targetOffset + 2, red);
}
else {
byteBufferView.setUint8(targetOffset, red);
byteBufferView.setUint8(targetOffset + 1, green);
byteBufferView.setUint8(targetOffset + 2, blue);
}
if (targetOptions.colorMode.length === 4) {
byteBufferView.setUint8(targetOffset + 3, 255);
}
}
}
return byteBuffer;
}
exports.BMP_HEADER_LENGTH = 54;
function writeBMPHeader(buf, imageWidth, imageHeight, imageBytes, imagePPM) {
const bufView = uint8ArrayToDataView(buf);
// Uses header format BITMAPINFOHEADER https://en.wikipedia.org/wiki/BMP_file_format
// Bitmap file header
bufView.setUint8(0, 0x42); // B
bufView.setUint8(1, 0x4d); // M
bufView.setUint32(2, imageBytes + 54, true);
bufView.setInt16(6, 0, true);
bufView.setInt16(8, 0, true);
bufView.setUint32(10, 54, true); // Full header size
// DIB header (BITMAPINFOHEADER)
bufView.setUint32(14, 40, true); // DIB header size
bufView.setInt32(18, imageWidth, true);
bufView.setInt32(22, imageHeight, true);
bufView.setInt16(26, 1, true); // Color planes
bufView.setInt16(28, 24, true); // Bit depth
bufView.setInt32(30, 0, true); // Compression
bufView.setInt32(34, imageBytes, true); // Image size
bufView.setInt32(38, imagePPM, true); // Horizontal resolution ppm
bufView.setInt32(42, imagePPM, true); // Vertical resolution ppm
bufView.setInt32(46, 0, true); // Colour pallette size
bufView.setInt32(50, 0, true); // 'Important' Colour count
}
function uint8ArrayToDataView(buffer) {
return new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
}
//# sourceMappingURL=util.js.map