Toshihiro Shimizu 890ddd
#ifndef igs_motion_wind_pixel_h
Toshihiro Shimizu 890ddd
#define igs_motion_wind_pixel_h
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <vector></vector>
Toshihiro Shimizu 890ddd
#include "igs_math_random.h"
Toshihiro Shimizu 890ddd
#include "igs_ifx_common.h" /* igs::image::rgba::siz */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef IGS_MOTION_WIND_EXPORT
Toshihiro Shimizu 890ddd
#define IGS_MOTION_WIND_EXPORT
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace igs
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
namespace motion_wind
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
class IGS_MOTION_WIND_EXPORT pixel
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	pixel(
Toshihiro Shimizu 890ddd
		const bool blow_dark_sw, const bool blow_alpha_sw
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		,
Toshihiro Shimizu 890ddd
		const unsigned long length_random_seed, const double length_min, const double length_max, const double length_bias, const bool length_ref_sw
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		,
Toshihiro Shimizu 890ddd
		const unsigned long force_random_seed, const double force_min, const double force_max, const double force_bias, const bool force_ref_sw
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		,
Toshihiro Shimizu 890ddd
		const unsigned long density_random_seed, const double density_min, const double density_max, const double density_bias, const bool density_ref_sw);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int change(
Toshihiro Shimizu 890ddd
		const bool key_reset_sw
Toshihiro Shimizu 890ddd
		/***, const int ref_channel
Toshihiro Shimizu 890ddd
	, const double *ref_pixel***/ /* ゼロなら参照しない */
Toshihiro Shimizu 890ddd
		,
Toshihiro Shimizu 890ddd
		const double ref_val /* ゼロ以上なら有効値、マイナスなら無効 */
Toshihiro Shimizu 890ddd
		,
Toshihiro Shimizu 890ddd
		const int channels, double *pixel_tgt);
Toshihiro Shimizu 890ddd
	void clear(void);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	std::vector<double> table_; /* 減少テーブル */</double>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	igs::math::random length_random_;  // default seed is 1
Toshihiro Shimizu 890ddd
	igs::math::random force_random_;   // default seed is 1
Toshihiro Shimizu 890ddd
	igs::math::random density_random_; // default seed is 1
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	const bool blow_dark_sw_,
Toshihiro Shimizu 890ddd
		blow_alpha_sw_;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/* ref全体をセットするか否かは、参照画像があるかない(NULL)かで決める */
Toshihiro Shimizu 890ddd
	const double length_min_,
Toshihiro Shimizu 890ddd
		length_max_;
Toshihiro Shimizu 890ddd
	const double length_bias_;
Toshihiro Shimizu 890ddd
	const bool length_ref_sw_;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	const double force_min_,
Toshihiro Shimizu 890ddd
		force_max_;
Toshihiro Shimizu 890ddd
	const double force_bias_;
Toshihiro Shimizu 890ddd
	const bool force_ref_sw_;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	const double density_min_,
Toshihiro Shimizu 890ddd
		density_max_;
Toshihiro Shimizu 890ddd
	const double density_bias_;
Toshihiro Shimizu 890ddd
	const bool density_ref_sw_;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	double key_lightness_;
Toshihiro Shimizu 890ddd
	double pixel_key_[igs::image::rgba::siz];
Toshihiro Shimizu 890ddd
	long table_len_,
Toshihiro Shimizu 890ddd
		table_pos_;
Toshihiro Shimizu 890ddd
	double *table_array_;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/* copy constructorを無効化 */
Toshihiro Shimizu 890ddd
	pixel(const pixel &);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/* 代入演算子を無効化 */
Toshihiro Shimizu 890ddd
	pixel &operator=(const pixel &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif /* !igs_motion_wind_pixel_h */