bkgdChunkRefiner(): Refiner<PngChunkUnknown, BkgdChunk, []>
Creates a refiner for bKGD (background color) chunks.
Converts between raw binary bKGD chunks and structured BkgdChunk representations. The refiner handles all three background color formats (grayscale, RGB, indexed) by storing raw byte values that can be interpreted based on the image's color type.
Refining a grayscale background chunk
Refining a grayscale background chunk
import { assertEquals } from "@std/assert"; import { createContext } from "@hertzg/binstruct"; import type { PngChunkUnknown } from "../mod.ts"; import { bkgdChunkRefiner } from "./bkgd.ts"; const refiner = bkgdChunkRefiner(); const context = createContext("decode"); const unknownChunk: PngChunkUnknown = { length: 2, type: new Uint8Array([98, 75, 71, 68]), data: new Uint8Array([128, 0]), // Gray level 32768 (0x8000) as u16be crc: 0xAABBCCDD, }; const refined = refiner.refine(unknownChunk, context); assertEquals(refined.type, "bKGD"); assertEquals(refined.data.values.length, 2); assertEquals(refined.data.values[0], 128); assertEquals(refined.data.values[1], 0);
Refining an RGB background chunk
Refining an RGB background chunk
import { assertEquals } from "@std/assert"; import { createContext } from "@hertzg/binstruct"; import type { PngChunkUnknown } from "../mod.ts"; import { bkgdChunkRefiner } from "./bkgd.ts"; const refiner = bkgdChunkRefiner(); const context = createContext("decode"); const unknownChunk: PngChunkUnknown = { length: 6, type: new Uint8Array([98, 75, 71, 68]), data: new Uint8Array([255, 255, 255, 255, 0, 0]), // Yellow crc: 0x11223344, }; const refined = refiner.refine(unknownChunk, context); assertEquals(refined.type, "bKGD"); assertEquals(refined.data.values, [255, 255, 255, 255, 0, 0]);
Round-trip encoding and decoding
Round-trip encoding and decoding
import { assertEquals } from "@std/assert"; import { createContext } from "@hertzg/binstruct"; import { type BkgdChunk, bkgdChunkRefiner } from "./bkgd.ts"; const refiner = bkgdChunkRefiner(); const encodeContext = createContext("encode"); const decodeContext = createContext("decode"); const original: BkgdChunk = { length: 1, type: "bKGD", data: { values: [42], // Palette index for indexed color }, crc: 0x12345678, }; const unrefined = refiner.unrefine(original, encodeContext); const refined = refiner.refine(unrefined, decodeContext); assertEquals(refined.type, original.type); assertEquals(refined.data.values, original.data.values);
Refiner<PngChunkUnknown, BkgdChunk, []>
A refiner that converts between PngChunkUnknown and BkgdChunk