@@ -178,27 +178,34 @@ def _setLum(originalColours: np.ndarray, newLuminosity: np.ndarray) -> np.ndarra
178178 """Set a new luminosity value for the matrix of color."""
179179 _colours = originalColours .copy ()
180180 _luminosity = _lum (_colours )
181+
182+ # Apply deltaLum in a single step
181183 deltaLum = newLuminosity - _luminosity
182- _colours [:, :, 0 ] += deltaLum
183- _colours [:, :, 1 ] += deltaLum
184- _colours [:, :, 2 ] += deltaLum
184+ _colours += deltaLum [..., None ] # Broadcasting to RGB channels
185+
186+ # Compute new luminosity, min, and max values
185187 _luminosity = _lum (_colours )
186- _minColours = np .min (_colours , axis = 2 )
187- _MaxColours = np .max (_colours , axis = 2 )
188- for i in range (_colours .shape [0 ]):
189- for j in range (_colours .shape [1 ]):
190- _colour = _colours [i ][j ]
191- newLuminosity = _luminosity [i , j ]
192- minColour = _minColours [i , j ]
193- maxColour = _MaxColours [i , j ]
194- if minColour < 0 :
195- _colours [i ][j ] = newLuminosity + (
196- ((_colour - newLuminosity ) * newLuminosity ) / (newLuminosity - minColour )
197- )
198- if maxColour > 1 :
199- _colours [i ][j ] = newLuminosity + (
200- ((_colour - newLuminosity ) * (1 - newLuminosity )) / (maxColour - newLuminosity )
201- )
188+ minColours = np .min (_colours , axis = 2 )
189+ maxColours = np .max (_colours , axis = 2 )
190+
191+ # Create masks for values that need adjustment
192+ minMask = minColours < 0
193+ maxMask = maxColours > 1
194+
195+ # Apply min correction
196+ _colours [minMask ] = (
197+ _luminosity [minMask , None ] +
198+ ((_colours [minMask ] - _luminosity [minMask , None ]) * _luminosity [minMask , None ]) /
199+ (_luminosity [minMask , None ] - minColours [minMask , None ])
200+ )
201+
202+ # Apply max correction
203+ _colours [maxMask ] = (
204+ _luminosity [maxMask , None ] +
205+ ((_colours [maxMask ] - _luminosity [maxMask , None ]) * (1 - _luminosity [maxMask , None ])) /
206+ (maxColours [maxMask , None ] - _luminosity [maxMask , None ])
207+ )
208+
202209 return _colours
203210
204211
0 commit comments