98 lines
2.7 KiB
C#
98 lines
2.7 KiB
C#
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: RGB.cs
|
||
|
//
|
||
|
// Note:
|
||
|
//
|
||
|
|
||
|
using System;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
|
||
|
using Microsoft.SingSharp;
|
||
|
using Microsoft.Singularity;
|
||
|
using Microsoft.Singularity.Channels;
|
||
|
|
||
|
namespace Microsoft.Singularity.Io
|
||
|
{
|
||
|
[CLSCompliant(false)]
|
||
|
public struct RGB
|
||
|
{
|
||
|
byte red;
|
||
|
byte green;
|
||
|
byte blue;
|
||
|
|
||
|
public RGB(byte _red, byte _green, byte _blue)
|
||
|
{
|
||
|
red = _red;
|
||
|
green = _green;
|
||
|
blue = _blue;
|
||
|
}
|
||
|
|
||
|
public RGB(uint color32)
|
||
|
{
|
||
|
red = (byte)((color32 & 0xff0000) >> 16);
|
||
|
green = (byte)((color32 & 0x00ff00) >> 8);
|
||
|
blue = (byte)((color32 & 0x0000ff) >> 0);
|
||
|
}
|
||
|
|
||
|
public static explicit operator uint (RGB color)
|
||
|
{
|
||
|
return Compute32(color.red, color.green, color.blue);
|
||
|
}
|
||
|
|
||
|
public static explicit operator ushort (RGB color)
|
||
|
{
|
||
|
return Compute16(color.red, color.green, color.blue);
|
||
|
}
|
||
|
|
||
|
public static explicit operator byte (RGB color)
|
||
|
{
|
||
|
return Compute4(color.red, color.green, color.blue);
|
||
|
}
|
||
|
|
||
|
public static byte Compute4(byte red, byte green, byte blue)
|
||
|
{
|
||
|
byte c = 0;
|
||
|
|
||
|
if (red > 0x40) {
|
||
|
c |= 0x4;
|
||
|
}
|
||
|
if (green > 0x40) {
|
||
|
c |= 0x2;
|
||
|
}
|
||
|
if (blue > 0x40) {
|
||
|
c |= 0x1;
|
||
|
}
|
||
|
if (red > 0x80 || green > 0x80 || blue > 0x80) {
|
||
|
c |= 0x8;
|
||
|
}
|
||
|
return c;
|
||
|
}
|
||
|
|
||
|
public static ushort Compute16(byte red, byte green, byte blue)
|
||
|
{
|
||
|
return (ushort)((((ushort)red >> 3) << 11) |
|
||
|
(((ushort)green >> 2) << 5) |
|
||
|
((ushort)blue >> 3));
|
||
|
}
|
||
|
|
||
|
public static uint Compute32(byte red, byte green, byte blue)
|
||
|
{
|
||
|
return ((((uint)red) << 16) |
|
||
|
(((uint)green) << 8) |
|
||
|
((uint)blue));
|
||
|
}
|
||
|
|
||
|
public static readonly RGB White = new RGB(255, 255, 255);
|
||
|
public static readonly RGB Red = new RGB(255, 0, 0);
|
||
|
public static readonly RGB Green = new RGB(0, 255, 0);
|
||
|
public static readonly RGB Blue = new RGB(0, 0, 255);
|
||
|
public static readonly RGB Black = new RGB(0, 0, 0);
|
||
|
public static readonly RGB Gray = new RGB(127, 127, 127);
|
||
|
};
|
||
|
} // namespace Microsoft.Singularity.Io
|