Histogram (hIST)
- Status: PNG Specification
- Location: after PLTE, before first IDAT
- Multiple: no
A histogram is nothing more than a frequency-of-occurrence table, and the
PNG hIST chunk gives the approximate frequencies of occurrence for pixels
of various colors. This information is typically used to decide which
colors are the most important if the system is not capable of displaying
all of them. Rather than force the decoder to count pixels every time the
image is displayed, the histogram places the burden on the encoder, which
performs the task only once.
PNG's hIST implementation is tied to the PLTE chunk; if there is no palette,
hIST is not allowed. This and one or two other limitations were later
recognized and addressed by the sPLT chunk, which we'll discuss next; it is
generally favored over hIST, but the latter is smaller, and either may be
used.
The histogram must contain exactly as many entries as PLTE contains,
and each entry is a 16-bit unsigned integer. Since such integers can
only represent numbers in the range 0-65,535 and there may be
millions of pixels of a given color, the histogram entries often must
be scaled and are therefore inexact. The sole exception is the value
zero; it is guaranteed to mean that there are no pixels of the
corresponding color. A nonzero count that would otherwise be scaled
and rounded to zero must instead be rounded up to one.
Truecolor images that include a PLTE chunk as a suggested quantization
are a special case. The histogram counts are dependent on the
algorithm used by the encoder for quantizing the pixels; if the
decoder happens to use a different algorithm, its counts would be
different, too. The upshot is that the histogram is particularly
approximate in this case. Because truecolor images
typically have far more colors than palette entries, the palette
entries that do appear should always represent at least one
pixel; thus there should be no zero counts in the histogram.
|