using System;
using System.Globalization;
using Microsoft.Xna.Framework;
namespace MLEM.Extensions {
///
/// A set of extensions for dealing with objects
///
public static class ColorExtensions {
///
/// Copies the alpha value from another color into this color.
///
/// The color
/// The color to copy the alpha from
/// The first color with the second color's alpha value
public static Color CopyAlpha(this Color color, Color other) {
return color * (other.A / 255F);
}
///
/// Returns an inverted version of this color.
///
/// The color to invert
/// The inverted color
public static Color Invert(this Color color) {
return new Color(Math.Abs(255 - color.R), Math.Abs(255 - color.G), Math.Abs(255 - color.B), color.A);
}
}
///
/// A set of utility methods for dealing with objects
///
public static class ColorHelper {
///
/// Parses a hexadecimal number into an rgba color.
/// The number should be in the format 0xaarrggbb.
///
/// The number to parse
/// The resulting color
public static Color FromHexRgba(int value) {
return new Color(value >> 16 & 0xFF, value >> 8 & 0xFF, value >> 0 & 0xFF, value >> 24 & 0xFF);
}
///
/// Parses a hexadecimal number into an rgb color with 100% alpha.
/// The number should be in the format 0xrrggbb.
///
/// The number to parse
/// The resulting color
public static Color FromHexRgb(int value) {
return new Color(value >> 16 & 0xFF, value >> 8 & 0xFF, value >> 0 & 0xFF);
}
///
/// Parses a hexadecimal string into a color.
/// The string can either be formatted as RRGGBB or AARRGGBB and can optionally start with a #.
///
/// The string to parse
/// The resulting color
public static Color FromHexString(string value) {
if (value.StartsWith("#"))
value = value.Substring(1);
var val = int.Parse(value, NumberStyles.HexNumber);
return value.Length > 6 ? FromHexRgba(val) : FromHexRgb(val);
}
}
}