function bkgdChunkRefiner
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.

Examples

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

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

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);

Return Type

A refiner that converts between PngChunkUnknown and BkgdChunk