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;
 | 
											const pixel_argb_t * s_end = s_rgb + rest;
 | 
				
			||||||
 | 
											auto rest_d_rgb = d_rgb;
 | 
				
			||||||
						for(auto i = s_rgb; i != s_end; ++i)
 | 
											for(auto i = s_rgb; i != s_end; ++i)
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							if(i->element.alpha_channel)
 | 
												if(i->element.alpha_channel)
 | 
				
			||||||
							{
 | 
												{
 | 
				
			||||||
								if(i->element.alpha_channel != 255)
 | 
													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;
 | 
														rest_d_rgb->element.red = unsigned(rest_d_rgb->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;
 | 
														rest_d_rgb->element.green = unsigned(rest_d_rgb->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.blue = unsigned(rest_d_rgb->element.blue * (255 - i->element.alpha_channel) + i->element.blue * i->element.alpha_channel) / 255;
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
								else
 | 
													else
 | 
				
			||||||
									d_rgb[3] = *i;
 | 
														*rest_d_rgb = *i;
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
 | 
												++rest_d_rgb;
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						d_rgb = pixel_at(d_rgb, d_step_bytes);
 | 
											d_rgb = pixel_at(d_rgb, d_step_bytes);
 | 
				
			||||||
						s_rgb = pixel_at(s_rgb, s_step_bytes);
 | 
											s_rgb = pixel_at(s_rgb, s_step_bytes);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user