From 62e76348aeb15ef96f06e74009ee48e8e4826424 Mon Sep 17 00:00:00 2001 From: Robert Krahn Date: Mon, 30 Dec 2019 10:02:10 -0500 Subject: [PATCH] Add types for bmp-js (#41199) --- types/bmp-js/bmp-js-tests.ts | 8 ++++ types/bmp-js/index.d.ts | 76 ++++++++++++++++++++++++++++++++++++ types/bmp-js/tsconfig.json | 23 +++++++++++ types/bmp-js/tslint.json | 3 ++ 4 files changed, 110 insertions(+) create mode 100644 types/bmp-js/bmp-js-tests.ts create mode 100755 types/bmp-js/index.d.ts create mode 100755 types/bmp-js/tsconfig.json create mode 100644 types/bmp-js/tslint.json diff --git a/types/bmp-js/bmp-js-tests.ts b/types/bmp-js/bmp-js-tests.ts new file mode 100644 index 0000000000..f0a43fea0f --- /dev/null +++ b/types/bmp-js/bmp-js-tests.ts @@ -0,0 +1,8 @@ +import { decode, encode } from "bmp-js"; +import { readFileSync, writeFileSync } from "fs"; + +const bmpBuffer = readFileSync('grayscale.bmp'); +const decoded = decode(bmpBuffer); +const { width, height, data } = decoded; +console.log("got bmp with %s x %s (%s bytes)", width, height, data.byteLength); +writeFileSync("testoutput.bmp", encode(decoded).data); diff --git a/types/bmp-js/index.d.ts b/types/bmp-js/index.d.ts new file mode 100755 index 0000000000..3df7860ebb --- /dev/null +++ b/types/bmp-js/index.d.ts @@ -0,0 +1,76 @@ +// Type definitions for bmp-js 0.1 +// Project: https://github.com/shaozilee/bmp-js +// Definitions by: Robert Krahn +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +export interface ImageData { + readonly data: Buffer; + readonly height: number; + readonly width: number; +} + +export type Encode = (imgData: ImageData, quality?: number) => ImageData; + +/** + * Bmp format decoder, support 1bit 4bit 8bit 24bit bmp + */ +export class BmpDecoder implements ImageData { + private pos: number; + data: Buffer; + fileSize: number; + reserved: number; + offset: number; + headerSize: number; + width: number; + height: number; + planes: number; + bitPP: number; + compress: number; + rawSize: number; + hr: number; + vr: number; + colors: number; + importantColors: number; + bottom_up: boolean; + + palette: Array<{ + red: number; + green: number; + blue: number; + quad: number; + }>; + + constructor(buffer: Buffer, is_with_alpha?: boolean); + + /** + * Returns the data buffer - byte array order by ABGR ABGR ABGR,4 bytes per pixel + */ + getData(): Buffer; + + private parseHeader(): void; + private parseRGBA(): void; + private bit1(): void; + private bit4(): void; + private bit8(): void; + private bit15(): void; + private bit16(): void; + private bit24(): void; + private bit32(): void; +} + +export type Decode = (bmpData: Buffer) => BmpDecoder; + +/** + * var bmp = require("bmp-js"); + * var bmpBuffer = fs.readFileSync('bit24.bmp'); + * var bmpData = bmp.decode(bmpBuffer); + */ +export const decode: Decode; + +/** + * var bmp = require("bmp-js"); + * var rawData = bmp.encode(bmpData); //default no compression,write rawData to .bmp file + */ +export const encode: Encode; diff --git a/types/bmp-js/tsconfig.json b/types/bmp-js/tsconfig.json new file mode 100755 index 0000000000..c7618996e3 --- /dev/null +++ b/types/bmp-js/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "bmp-js-tests.ts" + ] +} diff --git a/types/bmp-js/tslint.json b/types/bmp-js/tslint.json new file mode 100644 index 0000000000..d88586e5bd --- /dev/null +++ b/types/bmp-js/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "dtslint/dt.json" +}