nana/include/nana/paint/image_process_interface.hpp
2014-12-24 02:07:39 +08:00

86 lines
3.6 KiB
C++

/*
* Image Processing Interfaces
* Copyright(C) 2003-2013 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* @file: nana/paint/image_process_interface.hpp
*/
#ifndef NANA_PAINT_IMAGE_PROCESS_INTERFACE_HPP
#define NANA_PAINT_IMAGE_PROCESS_INTERFACE_HPP
#include <nana/basic_types.hpp>
#include <nana/paint/pixel_buffer.hpp>
namespace nana
{
namespace paint
{ /// Image Processing Algorithm Interfaces
namespace image_process
{ /// The interface of stretch algorithm.
class stretch_interface
{
public:
virtual ~stretch_interface() = default;
/// Copies the image from a source rectangle into a destination rectangle, stretching or compressing the image to fit the dimensions of the destination rectangle in destination(d_pixbuf).
virtual void process(const paint::pixel_buffer & s_pixbuf,
const nana::rectangle& source_rectangle,
paint::pixel_buffer & d_pixbuf,
const nana::rectangle& destination_rectangle
) const = 0;
};
class alpha_blend_interface
{
public:
virtual ~alpha_blend_interface() = default;
virtual void process(const paint::pixel_buffer& s_pixbuf, const nana::rectangle& s_r, paint::pixel_buffer& d_pixbuf, const point& d_pos) const = 0;
};
/// The interface of a blend algorithm.
class blend_interface
{
public:
virtual ~blend_interface() = default;
/// \brief Blends two images with specified area and blend rate.
///
/// Semantics: \code dest_pixbuf = dest_pixbuf * fade_rate + scr_pixbuf * (1 - fade_rate); \endcode
/// The area is always valid, it is calculated by Nana before passing to the algorithm. So the area could be applied without a check.
virtual void process( const paint::pixel_buffer& src_pixbuf,
const nana::rectangle& src_area,
paint::pixel_buffer& dest_pixbuf,
const nana::point& dest_pos,
double fade_rate ///< blend rate in the range of [0, 1]
) const = 0;
};
/// The interface of line algorithm.
class line_interface
{
public:
virtual ~line_interface() = default;
/// \brief Draws a line
///
/// Semantics: \code pixbuf = pixbuf * (1 - fade_rate) + color * fade_rate \endcode
/// The two points are calculated by Nana, they are always valid, and pos_beg.x <= pos_end.x
virtual void process(paint::pixel_buffer & pixbuf,
const point& pos_beg, ///< left point
const point& pos_end, ///< right point
const ::nana::color&,
double fade_rate ///< blend rate in the range of [0, 1] If not 0, the line is blended to the pixbuf
) const = 0;
};
class blur_interface
{
public:
virtual ~blur_interface() = default;
virtual void process(paint::pixel_buffer&, const nana::rectangle& r, std::size_t radius) const = 0;
};
}
}//end namespace paint
}//end namespace nana
#endif