mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 13:36:36 +00:00
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { encodeBmpBytes } from "./bmp";
|
|
import { makeImage } from "./test-helpers";
|
|
|
|
describe("encodeBmpBytes", () => {
|
|
it("пишет заголовки BM и размеры для 2x1 без паддинга-неопределённости", () => {
|
|
const bytes = encodeBmpBytes(
|
|
makeImage(2, 1, [
|
|
[255, 0, 0, 255],
|
|
[0, 255, 0, 255],
|
|
]),
|
|
);
|
|
expect([bytes[0], bytes[1]]).toEqual([0x42, 0x4d]);
|
|
const view = new DataView(bytes.buffer);
|
|
expect(view.getUint32(2, true)).toBe(54 + 8);
|
|
expect(view.getInt32(18, true)).toBe(2);
|
|
expect(view.getInt32(22, true)).toBe(1);
|
|
expect(view.getUint16(28, true)).toBe(24);
|
|
});
|
|
|
|
it("хранит пиксели в BGR снизу-вверх с паддингом строки", () => {
|
|
const bytes = encodeBmpBytes(
|
|
makeImage(2, 1, [
|
|
[255, 0, 0, 255],
|
|
[0, 255, 0, 255],
|
|
]),
|
|
);
|
|
expect([...bytes.slice(54, 60)]).toEqual([0, 0, 255, 0, 255, 0]);
|
|
expect(bytes[60]).toBe(0);
|
|
expect(bytes[61]).toBe(0);
|
|
});
|
|
|
|
it("нижняя строка изображения идёт первой в файле", () => {
|
|
const bytes = encodeBmpBytes(
|
|
makeImage(4, 2, [
|
|
[10, 10, 10, 255],
|
|
[20, 20, 20, 255],
|
|
[30, 30, 30, 255],
|
|
[40, 40, 40, 255],
|
|
[50, 50, 50, 255],
|
|
[60, 60, 60, 255],
|
|
[70, 70, 70, 255],
|
|
[80, 80, 80, 255],
|
|
]),
|
|
);
|
|
expect(bytes[54]).toBe(50);
|
|
expect(bytes[54 + 12]).toBe(10);
|
|
});
|
|
});
|