Quote Originally Posted by Schmidt View Post
That's because you probably did not adapt the Saturation-Interval Filter-Settings
(which I've set to [0.75 ... 1.0] in my Demo-Code)...

Here is the Mouse_Move Event again, which shows these Filter-Settings in red:
Code:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 0 Then Exit Sub 'do nothing, until the User presses a MouseKey whilst moving
  Dim HueAngle As Long, Result As cCairoSurface
      HueAngle = (X + Y) / (ScaleWidth + ScaleHeight) * 360
      Caption = "Current HueAngle: " & HueAngle & "°"

      New_c.Timing True
         Set Result = HueRotate(Src, HueAngle, 0.75, 1) '<- the Saturation-FilterInterval is optional
      Caption = Caption & New_c.Timing

      Result.DrawToDC hDC
End Sub
To produce "results like everybody else", you can just leave out these last optional Interval-Params
(which then would default to the all-pixels range-condition of [0 ... 1]).

I still think that theses Optional Filters in the HueRotate-function are "nice to have"
especially since I've now incorporated this into cCairoSurface as a Method, callable like this:
Set ResultSrf = Src.HueRotate(HueAngle, 0, 1)
or - as said - leaving the Filters out completely, will behave the same (still using the [0, 1] interval):
Set ResultSrf = Src.HueRotate(HueAngle)

HTH

Olaf
Set it to rotate only pixels with saturation values above 30%. That seems to work well, at least with the two sprites he provided. For untested sprites, he could play around with different filter settings like you mentioned. Most often though, I'd expect some variation of filtering based on saturation.