Skip to content

Commit

Permalink
Merge pull request #13726 from anntzer/blend_hsv
Browse files Browse the repository at this point in the history
Clarify a bit the implementation of blend_hsv.
  • Loading branch information
jklymak committed Mar 25, 2019
2 parents 24e4bea + b55a908 commit 35dc7c8
Showing 1 changed file with 15 additions and 16 deletions.
31 changes: 15 additions & 16 deletions lib/matplotlib/colors.py
Expand Up @@ -1843,24 +1843,23 @@ def blend_hsv(self, rgb, intensity, hsv_max_sat=None, hsv_max_val=None,
intensity = intensity[..., 0]
intensity = 2 * intensity - 1

# convert to rgb, then rgb to hsv
# Convert to rgb, then rgb to hsv
hsv = rgb_to_hsv(rgb[:, :, 0:3])

# modify hsv values to simulate illumination.
np.putmask(hsv[:, :, 1], # i.e. A[mask] = B[mask].
(np.abs(hsv[:, :, 1]) > 1.e-10) & (intensity > 0),
(1 - intensity) * hsv[:, :, 1] + intensity * hsv_max_sat)
np.putmask(hsv[:, :, 2],
intensity > 0,
(1 - intensity) * hsv[:, :, 2] + intensity * hsv_max_val)
np.putmask(hsv[:, :, 1],
(np.abs(hsv[:, :, 1]) > 1.e-10) & (intensity < 0),
(1 + intensity) * hsv[:, :, 1] - intensity * hsv_min_sat)
np.putmask(hsv[:, :, 2],
intensity < 0,
(1 + intensity) * hsv[:, :, 2] - intensity * hsv_min_val)
hue, sat, val = np.moveaxis(hsv, -1, 0)

# Modify hsv values (in place) to simulate illumination.
# putmask(A, mask, B) <=> A[mask] = B[mask]
np.putmask(sat, (np.abs(sat) > 1.e-10) & (intensity > 0),
(1 - intensity) * sat + intensity * hsv_max_sat)
np.putmask(sat, (np.abs(sat) > 1.e-10) & (intensity < 0),
(1 + intensity) * sat - intensity * hsv_min_sat)
np.putmask(val, intensity > 0,
(1 - intensity) * val + intensity * hsv_max_val)
np.putmask(val, intensity < 0,
(1 + intensity) * val - intensity * hsv_min_val)
np.clip(hsv[:, :, 1:], 0, 1, out=hsv[:, :, 1:])
# convert modified hsv back to rgb.

# Convert modified hsv back to rgb.
return hsv_to_rgb(hsv)

def blend_soft_light(self, rgb, intensity):
Expand Down

0 comments on commit 35dc7c8

Please sign in to comment.