| import BMP from "bmp-js"; | |
| import { scan } from "@jimp/utils"; | |
| const MIME_TYPE = "image/bmp"; | |
| const MIME_TYPE_SECOND = "image/x-ms-bmp"; | |
| function toAGBR(image) { | |
| return scan( | |
| image, | |
| 0, | |
| 0, | |
| image.bitmap.width, | |
| image.bitmap.height, | |
| function (x, y, index) { | |
| const red = this.bitmap.data[index + 0]; | |
| const green = this.bitmap.data[index + 1]; | |
| const blue = this.bitmap.data[index + 2]; | |
| const alpha = this.bitmap.data[index + 3]; | |
| this.bitmap.data[index + 0] = alpha; | |
| this.bitmap.data[index + 1] = blue; | |
| this.bitmap.data[index + 2] = green; | |
| this.bitmap.data[index + 3] = red; | |
| } | |
| ).bitmap; | |
| } | |
| function fromAGBR(bitmap) { | |
| return scan( | |
| { bitmap }, | |
| 0, | |
| 0, | |
| bitmap.width, | |
| bitmap.height, | |
| function (x, y, index) { | |
| const alpha = this.bitmap.data[index + 0]; | |
| const blue = this.bitmap.data[index + 1]; | |
| const green = this.bitmap.data[index + 2]; | |
| const red = this.bitmap.data[index + 3]; | |
| this.bitmap.data[index + 0] = red; | |
| this.bitmap.data[index + 1] = green; | |
| this.bitmap.data[index + 2] = blue; | |
| this.bitmap.data[index + 3] = bitmap.is_with_alpha ? alpha : 0xff; | |
| } | |
| ).bitmap; | |
| } | |
| const decode = (data) => fromAGBR(BMP.decode(data)); | |
| const encode = (image) => BMP.encode(toAGBR(image)).data; | |
| export default () => ({ | |
| mime: { [MIME_TYPE]: ["bmp"] }, | |
| constants: { | |
| MIME_BMP: MIME_TYPE, | |
| MIME_X_MS_BMP: MIME_TYPE_SECOND, | |
| }, | |
| decoders: { | |
| [MIME_TYPE]: decode, | |
| [MIME_TYPE_SECOND]: decode, | |
| }, | |
| encoders: { | |
| [MIME_TYPE]: encode, | |
| [MIME_TYPE_SECOND]: encode, | |
| }, | |
| }); | |