37 lines
1.4 KiB
C#
Executable File
37 lines
1.4 KiB
C#
Executable File
using System.Numerics;
|
|
|
|
namespace ChatTwo.Util;
|
|
|
|
internal static class ColourUtil {
|
|
private static (byte r, byte g, byte b, byte a) RgbaToComponents(uint rgba) {
|
|
var r = (byte) ((rgba & 0xFF000000) >> 24);
|
|
var g = (byte) ((rgba & 0xFF0000) >> 16);
|
|
var b = (byte) ((rgba & 0xFF00) >> 8);
|
|
var a = (byte) (rgba & 0xFF);
|
|
return (r, g, b, a);
|
|
}
|
|
|
|
internal static uint RgbaToAbgr(uint rgba) {
|
|
var (r, g, b, a) = RgbaToComponents(rgba);
|
|
return (uint) ((a << 24) | (b << 16) | (g << 8) | r);
|
|
}
|
|
|
|
internal static Vector3 RgbaToVector3(uint rgba) {
|
|
var (r, g, b, _) = RgbaToComponents(rgba);
|
|
return new Vector3((float) r / 255, (float) g / 255, (float) b / 255);
|
|
}
|
|
|
|
internal static uint Vector3ToRgba(Vector3 col) {
|
|
return ComponentsToRgba(
|
|
(byte) Math.Round(col.X * 255),
|
|
(byte) Math.Round(col.Y * 255),
|
|
(byte) Math.Round(col.Z * 255)
|
|
);
|
|
}
|
|
|
|
internal static uint ComponentsToRgba(byte red, byte green, byte blue, byte alpha = 0xFF) => alpha
|
|
| (uint) (red << 24)
|
|
| (uint) (green << 16)
|
|
| (uint) (blue << 8);
|
|
}
|