Listing 5: Laplacian pyramid constructor used for compression

LP::LP (unsigned width, unsigned height, 
     const unsigned char *image,
     unsigned levels, unsigned *bpp)
{
    // Build pyramid structure and copy initial image

    if (!width || !height || !levels || !image)
        throw "Invalid parameter";

    _width = width;
    _height = height;

    // Adjust levels if width or height is too small

    while (width >> (levels - 1) == 0 || height >> (levels - 1) == 0)
        --levels;

    _levels = levels;
    _bpp = new unsigned [levels];

    if (!_bpp)
        throw "Memory allocation error";

    for (unsigned level = 0; level < levels; level++)
        _bpp[level] = bpp[level];

    AllocateLevels ();

    // Copy image into level 0

    memcpy (_r_images[0], image, _width * _height);
}
//End of File