singrdk/base/Drivers/S3Trio64/RGB.cs

98 lines
2.7 KiB
C#
Raw Normal View History

2008-03-05 09:52:00 -05:00
///////////////////////////////////////////////////////////////////////////////
//
// 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