function icoDir
icoDir(): Coder<IcoDir>

Creates a coder for an ICO/CUR icon directory.

Decodes/encodes the ICONDIR header and its ICONDIRENTRY array only. Embedded image payloads are not touched — use each entry's dataOffset and dataSize to locate them in the surrounding file.

imageCount is not computed for you on encode: set it to entries.length yourself.

Examples

Decode a known two-entry ICONDIR

import { assertEquals } from "@std/assert";
import { icoDir, ICO_IMAGE_TYPE, ICONDIR_SIZE, ICONDIRENTRY_SIZE } from "@binstruct/ico";

// deno-fmt-ignore
const wire = new Uint8Array([
  0x00, 0x00, // reserved = 0
  0x01, 0x00, // imageType = ICON
  0x02, 0x00, // imageCount = 2
  0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x68, 0x04, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
  0x20, 0x20, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x28, 0x09, 0x00, 0x00, 0x7e, 0x04, 0x00, 0x00,
]);

const [decoded, read] = icoDir().decode(wire);

assertEquals(read, ICONDIR_SIZE + 2 * ICONDIRENTRY_SIZE);
assertEquals(decoded.imageType, ICO_IMAGE_TYPE.ICON);
assertEquals(decoded.imageCount, 2);
assertEquals(decoded.entries.length, 2);
assertEquals(decoded.entries[0].width, 16);
assertEquals(decoded.entries[0].height, 16);
assertEquals(decoded.entries[0].bitCount, 32);
assertEquals(decoded.entries[0].dataSize, 0x468);
assertEquals(decoded.entries[0].dataOffset, 0x16);
assertEquals(decoded.entries[1].width, 32);
assertEquals(decoded.entries[1].dataOffset, 0x47e);

Return Type

Coder<IcoDir>

A coder for IcoDir values.

Usage

import { icoDir } from ".";