dlib C++ Library - assign_image.h

    // Copyright (C) 2007  Davis E. King (davisking@users.sourceforge.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #ifndef DLIB_ASSIGN_IMAGe_
    #define DLIB_ASSIGN_IMAGe_

    #include "../pixel.h"
    #include "assign_image_abstract.h"

    namespace dlib
    {

    // ----------------------------------------------------------------------------------------

        template <
            typename dest_image_type,
            typename src_image_type
            >
        void assign_image (
            dest_image_type& dest,
            const src_image_type& src
        )
        {
            // check for the case where dest is the same object as src
            if ((void*)&dest == (void*)&src)
                return;

            dest.set_size(src.nr(),src.nc());

            for (long r = 0; r < src.nr(); ++r)
            {
                for (long c = 0; c < src.nc(); ++c)
                {
                    assign_pixel(dest[r][c], src[r][c]);
                }
            }
        }

    // ----------------------------------------------------------------------------------------

        template <
            typename dest_image_type,
            typename src_pixel_type
            >
        void assign_all_pixels (
            dest_image_type& dest_img,
            const src_pixel_type& src_pixel
        )
        {
            for (long r = 0; r < dest_img.nr(); ++r)
            {
                for (long c = 0; c < dest_img.nc(); ++c)
                {
                    assign_pixel(dest_img[r][c], src_pixel);
                }
            }
        }

    // ----------------------------------------------------------------------------------------

        template <
            typename image_type
            >
        void assign_border_pixels (
            image_type& img,
            long x_border_size,
            long y_border_size,
            const typename image_type::type& p
        )
        {
            DLIB_ASSERT( x_border_size >= 0 && y_border_size >= 0,
                "\tvoid assign_border_pixels(img, p, border_size)"
                << "\n\tYou have given an invalid border_size"
                << "\n\tx_border_size: " << x_border_size
                << "\n\ty_border_size: " << y_border_size
                );

            // assign the top border
            for (long r = 0; r < y_border_size; ++r)
            {
                for (long c = 0; c < img.nc(); ++c)
                {
                    img[r][c] = p;
                }
            }

            // assign the bottom border
            for (long r = img.nr()-y_border_size; r < img.nr(); ++r)
            {
                for (long c = 0; c < img.nc(); ++c)
                {
                    img[r][c] = p;
                }
            }

            // now assign the two sides
            for (long r = y_border_size; r < img.nr()-y_border_size; ++r)
            {
                // left border
                for (long c = 0; c < x_border_size; ++c)
                    img[r][c] = p;

                // right border
                for (long c = img.nc()-x_border_size; c < img.nc(); ++c)
                    img[r][c] = p;
            }
        }

    // ----------------------------------------------------------------------------------------

        template <
            typename image_type
            >
        void zero_border_pixels (
            image_type& img,
            long x_border_size,
            long y_border_size
        )
        {
            DLIB_ASSERT( x_border_size >= 0 && y_border_size >= 0,
                "\tvoid zero_border_pixels(img, p, border_size)"
                << "\n\tYou have given an invalid border_size"
                << "\n\tx_border_size: " << x_border_size
                << "\n\ty_border_size: " << y_border_size
                );

            typename image_type::type zero_pixel;
            assign_pixel_intensity(zero_pixel, 0);
            assign_border_pixels(img, x_border_size, y_border_size, zero_pixel);
        }

    // ----------------------------------------------------------------------------------------

    }

    #endif // DLIB_ASSIGN_IMAGe_