public static void ChangeHueOpacity(Image image, int hue, int opacity)
{
using (var newImage = new Bitmap(image))
{
using (var g = Graphics.FromImage(image))
{
var imageAttr = new ImageAttributes();
var qm = new QColorMatrix();
qm.RotateHue(hue % 360);
qm.ScaleOpacity(opacity.Clamp(0, 255) / 255.0f);
imageAttr.SetColorMatrix(qm.ToColorMatrix());
var destRect = new Rectangle(new Point(), image.Size);
g.Clear(Color.Transparent);
g.DrawImage(newImage, destRect, 0, 0, image.Width, image.Height,
GraphicsUnit.Pixel, imageAttr);
}
}
}