@@ -155,46 +155,34 @@ private int DitherPixel(int x, int y, Color c2, float beta)
155155 else
156156 c2 = BlueNoise . Diffuse ( pixel , palette [ qPixelIndex ] , beta * .5f / saliencies [ bidx ] , strength , x , y ) ;
157157 }
158- if ( CIELABConvertor . U_Diff ( pixel , c2 ) > ( margin * acceptedDiff ) )
159- c2 = BlueNoise . Diffuse ( pixel , palette [ qPixelIndex ] , beta * NormalDistribution ( saliencies [ bidx ] , .25f ) + beta , strength , x , y ) ;
160158 }
161159
162- if ( margin > 6 || ( palette . Length <= 32 && weight < .01 && weight > .007 ) ) {
163- if ( palette . Length > 4 && CIELABConvertor . Y_Diff ( pixel , c2 ) > ( beta * acceptedDiff ) ) {
164- var kappa = saliencies [ bidx ] < .4f ? beta * .4f * saliencies [ bidx ] : beta * .4f / saliencies [ bidx ] ;
165- var c1 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
166- if ( palette . Length > 32 )
167- kappa = beta * NormalDistribution ( saliencies [ bidx ] , 2f ) ;
168- else
160+ if ( palette . Length > 4 && CIELABConvertor . Y_Diff ( pixel , c2 ) > ( beta * acceptedDiff ) ) {
161+ var kappa = saliencies [ bidx ] < .4f ? beta * .4f * saliencies [ bidx ] : beta * .4f / saliencies [ bidx ] ;
162+ var c1 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
163+ if ( palette . Length > 32 )
164+ kappa = beta * NormalDistribution ( saliencies [ bidx ] , 2f ) ;
165+ else
166+ {
167+ if ( weight >= .0015 && saliencies [ bidx ] < .6 )
168+ c1 = pixel ;
169+ if ( saliencies [ bidx ] < .6 )
170+ kappa = beta * NormalDistribution ( saliencies [ bidx ] , weight < .0008 ? 2.5f : 1.75f ) ;
171+ else if ( palette . Length >= 32 || CIELABConvertor . Y_Diff ( c1 , c2 ) > ( beta * Math . PI * acceptedDiff ) )
169172 {
170- if ( weight >= .0015 && saliencies [ bidx ] < .6 )
171- c1 = pixel ;
172- if ( saliencies [ bidx ] < .6 )
173- kappa = beta * NormalDistribution ( saliencies [ bidx ] , weight < .0008 ? 2.5f : 1.75f ) ;
174- else if ( palette . Length >= 32 || CIELABConvertor . Y_Diff ( c1 , c2 ) > ( beta * Math . PI * acceptedDiff ) )
175- {
176- var ub = 1 - palette . Length / 320.0 ;
177- if ( saliencies [ bidx ] > .15 && saliencies [ bidx ] < ub )
178- kappa = beta * ( ! sortedByYDiff && weight < .0025 ? .55f : .5f ) / saliencies [ bidx ] ;
179- else
180- kappa = beta * NormalDistribution ( saliencies [ bidx ] , weight < .0025 ? 1.82f : 2f ) ;
181- }
173+ var ub = 1 - palette . Length / 320.0 ;
174+ if ( saliencies [ bidx ] > .15 && saliencies [ bidx ] < ub )
175+ kappa = beta * ( ! sortedByYDiff && weight < .0025 ? .55f : .5f ) / saliencies [ bidx ] ;
176+ else
177+ kappa = beta * NormalDistribution ( saliencies [ bidx ] , weight < .0025 ? 1.82f : 2f ) ;
182178 }
183-
184- c2 = BlueNoise . Diffuse ( c1 , palette [ qPixelIndex ] , kappa , strength , x , y ) ;
185179 }
186- }
187- else if ( palette . Length > 4 && ( CIELABConvertor . Y_Diff ( pixel , c2 ) > ( beta * acceptedDiff ) || CIELABConvertor . U_Diff ( pixel , c2 ) < acceptedDiff ) ) {
188- if ( beta < .3f && ( palette . Length <= 32 || saliencies [ bidx ] < beta ) )
189- c2 = BlueNoise . Diffuse ( c2 , palette [ qPixelIndex ] , beta * .4f * saliencies [ bidx ] , strength , x , y ) ;
190- else
191- c2 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
192- }
193180
181+ c2 = BlueNoise . Diffuse ( c1 , palette [ qPixelIndex ] , kappa , strength , x , y ) ;
182+ }
183+
194184 if ( DITHER_MAX < 16 && palette . Length > 4 && saliencies [ bidx ] < .6f && CIELABConvertor . Y_Diff ( pixel , c2 ) > margin - 1 )
195185 c2 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
196- if ( beta > 1f && CIELABConvertor . Y_Diff ( pixel , c2 ) > DITHER_MAX )
197- c2 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
198186
199187 return ditherable . DitherColorIndex ( palette , c2 . ToArgb ( ) , bidx ) ;
200188 }
0 commit comments