fix an alpha blend algorithm issue
This commit is contained in:
		
							parent
							
								
									c512b2dad5
								
							
						
					
					
						commit
						79f484dd2e
					
				@ -330,19 +330,21 @@ namespace detail
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						const pixel_argb_t * s_end = s_rgb + rest;
 | 
			
		||||
						auto rest_d_rgb = d_rgb;
 | 
			
		||||
						for(auto i = s_rgb; i != s_end; ++i)
 | 
			
		||||
						{
 | 
			
		||||
							if(i->element.alpha_channel)
 | 
			
		||||
							{
 | 
			
		||||
								if(i->element.alpha_channel != 255)
 | 
			
		||||
								{
 | 
			
		||||
									d_rgb[3].element.red = unsigned(d_rgb[3].element.red * (255 - i->element.alpha_channel) + i->element.red * i->element.alpha_channel) / 255;
 | 
			
		||||
									d_rgb[3].element.green = unsigned(d_rgb[3].element.green * (255 - i->element.alpha_channel) + i->element.green * i->element.alpha_channel) / 255;
 | 
			
		||||
									d_rgb[3].element.blue = unsigned(d_rgb[3].element.blue * (255 - i->element.alpha_channel) + i->element.blue * i->element.alpha_channel) / 255;
 | 
			
		||||
									rest_d_rgb->element.red = unsigned(rest_d_rgb->element.red * (255 - i->element.alpha_channel) + i->element.red * i->element.alpha_channel) / 255;
 | 
			
		||||
									rest_d_rgb->element.green = unsigned(rest_d_rgb->element.green * (255 - i->element.alpha_channel) + i->element.green * i->element.alpha_channel) / 255;
 | 
			
		||||
									rest_d_rgb->element.blue = unsigned(rest_d_rgb->element.blue * (255 - i->element.alpha_channel) + i->element.blue * i->element.alpha_channel) / 255;
 | 
			
		||||
								}
 | 
			
		||||
								else
 | 
			
		||||
									d_rgb[3] = *i;
 | 
			
		||||
									*rest_d_rgb = *i;
 | 
			
		||||
							}
 | 
			
		||||
							++rest_d_rgb;
 | 
			
		||||
						}
 | 
			
		||||
						d_rgb = pixel_at(d_rgb, d_step_bytes);
 | 
			
		||||
						s_rgb = pixel_at(s_rgb, s_step_bytes);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user