Пример #1
0
	bool BlpBlend(const image::buffer& input_a, const image::buffer& input_b, image::buffer& output)
	{
		unsigned int input_width = 0;
		unsigned int input_height = 0;
		image::pixels input_a_pic, input_b_pic, output_pic;
		if (!image::blp::read(input_a, input_a_pic, &input_width, &input_height))
		{
			return false;
		}
		if (input_width != kBlpSize || input_height != kBlpSize)
		{
			return false;
		}
		if (!image::blp::read(input_b, input_b_pic, &input_width, &input_height))
		{
			return false;
		}
		if (input_width != kBlpSize || input_height != kBlpSize)
		{
			return false;
		}
		output_pic.resize(kBlpSize * kBlpSize);
		image::rgba* ptr = output_pic.data();
		for (size_t i = 0; i < kBlpSize * kBlpSize; ++i)
		{
			image::rgba const& pixel_a = input_a_pic[i];
			image::rgba const& pixel_b = input_b_pic[i];
			ptr->r = clamp_channel_bits8(((255 - pixel_a.a) * pixel_b.r + pixel_a.a * pixel_a.r) / 255);
			ptr->g = clamp_channel_bits8(((255 - pixel_a.a) * pixel_b.g + pixel_a.a * pixel_a.g) / 255);
			ptr->b = clamp_channel_bits8(((255 - pixel_a.a) * pixel_b.b + pixel_a.a * pixel_a.b) / 255);
			ptr->a = clamp_channel_bits8(255 - (255 - pixel_a.a) * (255 - pixel_b.a) / 255);
			ptr++;
		}
		if (!image::blp::write(output_pic, output, kBlpSize, kBlpSize, 95))
		{
			return false;
		}
		return true;
	}
Пример #2
0
 boost::uint8_t operator()(int alpha_a, int alpha_b) const
 {
   return clamp_channel_bits8(alpha_a + alpha_b - alpha_a * alpha_b / 255);
 }
Пример #3
0
 boost::uint8_t operator()(int channel_a, int channel_b, int alpha_a, int alpha_b) const
 {
   return clamp_channel_bits8(channel_a + channel_b * (255 - alpha_a) / 255);
 }
Пример #4
0
 boost::uint8_t operator()(int channel_a, int channel_b) const 
 {
   return clamp_channel_bits8(k1_ * channel_a * channel_b / 65535 + k2_ * channel_a / 255 + k3_ * channel_b / 255 + k4_);
 }
Пример #5
0
 boost::uint8_t operator()(int channel_a, int channel_b, int alpha_a, int alpha_b) const
 {
   return clamp_channel_bits8((channel_a * alpha_a * (255 - alpha_b) + channel_b * alpha_b * (255 - alpha_a)) / 65535);
 }