@@ -157,31 +157,42 @@ private int DitherPixel(int x, int y, Color c2, float beta)
157157 }
158158 }
159159
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 ) )
172- {
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 ) ;
178- }
179- }
180-
181- c2 = BlueNoise . Diffuse ( c1 , palette [ qPixelIndex ] , kappa , strength , x , y ) ;
182- }
183-
184- if ( DITHER_MAX < 16 && palette . Length > 4 && saliencies [ bidx ] < .6f && CIELABConvertor . Y_Diff ( pixel , c2 ) > margin - 1 )
160+ if ( margin > 6 || ( palette . Length <= 32 && weight < .01 && weight > .007 ) )
161+ {
162+ if ( palette . Length > 4 && CIELABConvertor . Y_Diff ( pixel , c2 ) > ( beta * acceptedDiff ) )
163+ {
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
169+ {
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+ }
182+ }
183+
184+ c2 = BlueNoise . Diffuse ( c1 , palette [ qPixelIndex ] , kappa , strength , x , y ) ;
185+ }
186+ }
187+ else if ( palette . Length > 4 && CIELABConvertor . Y_Diff ( pixel , c2 ) > ( beta * Math . PI * acceptedDiff ) )
188+ {
189+ if ( beta < .3f && ( palette . Length <= 32 || saliencies [ bidx ] < beta ) )
190+ c2 = BlueNoise . Diffuse ( c2 , palette [ qPixelIndex ] , beta * NormalDistribution ( saliencies [ bidx ] , .4f ) , strength , x , y ) ;
191+ else
192+ c2 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
193+ }
194+
195+ if ( DITHER_MAX < 16 && palette . Length > 4 && saliencies [ bidx ] < .6f && CIELABConvertor . Y_Diff ( pixel , c2 ) > margin - 1 )
185196 c2 = Color . FromArgb ( a_pix , r_pix , g_pix , b_pix ) ;
186197
187198 return ditherable . DitherColorIndex ( palette , c2 . ToArgb ( ) , bidx ) ;
0 commit comments