static void handler_PLTE(deark *c, lctx *d, struct handler_params *hp) { // pal is a dummy variable, since we don't need to keep the palette. // TODO: Maybe de_read_palette_rgb shouldn't require the palette to be returned. u32 pal[256]; i64 nentries; nentries = hp->dlen/3; de_dbg(c, "num palette entries: %d", (int)nentries); de_read_palette_rgb(c->infile, hp->dpos, nentries, 3, pal, DE_ITEMS_IN_ARRAY(pal), 0); }
static int do_read_palette(deark *c, lctx *d, i64 pos, i64 *pal_nbytes) { de_dbg(c, "palette at %d", (int)pos); de_dbg_indent(c, 1); d->num_pal_entries = de_getu16le(pos) + 1; de_dbg(c, "number of palette colors: %d", (int)d->num_pal_entries); if(d->palette_is_hls) *pal_nbytes = 2 + d->num_pal_entries * 6; else *pal_nbytes = 2 + d->num_pal_entries * 3; if(d->palette_is_hls) goto done; de_read_palette_rgb(c->infile, pos+2, d->num_pal_entries, 3, d->pal, 256, 0); done: de_dbg_indent(c, -1); return 1; }
static void do_read_palette(deark *c, lctx *d) { de_int64 pal_size_in_bytes; if(d->pal_entries<1) return; pal_size_in_bytes = d->pal_entries*d->bytes_per_pal_entry; if(d->pal_pos+pal_size_in_bytes > d->bits_offset) { de_warn(c, "Palette at %d (size %d) overlaps bitmap at %d\n", (int)d->pal_pos, (int)pal_size_in_bytes, (int)d->bits_offset); if(d->version==DE_BMPVER_OS2V2) { do_os2v2_bad_palette(c, d); } } de_dbg(c, "color table at %d, %d entries\n", (int)d->pal_pos, (int)d->pal_entries); de_dbg_indent(c, 1); de_read_palette_rgb(c->infile, d->pal_pos, d->pal_entries, d->bytes_per_pal_entry, d->pal, 256, DE_GETRGBFLAG_BGR); d->pal_is_grayscale = de_is_grayscale_palette(d->pal, d->pal_entries); de_dbg_indent(c, -1); }