@@ -178,27 +178,34 @@ def _setLum(originalColours: np.ndarray, newLuminosity: np.ndarray) -> np.ndarra
178
178
"""Set a new luminosity value for the matrix of color."""
179
179
_colours = originalColours .copy ()
180
180
_luminosity = _lum (_colours )
181
+
182
+ # Apply deltaLum in a single step
181
183
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
185
187
_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
+
202
209
return _colours
203
210
204
211
0 commit comments