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.
Decode a known two-entry ICONDIR
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);