|
using System;
using System.Drawing;
using System.Runtime.InteropServices;
namespace SimplePaletteQuantizer.Helpers.Pixels.NonIndexed
{
/// <summary>
/// Name | Blue | Green | Red |
/// Bit |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|
/// Byte |00000000000000000000000|11111111111111111111111|
/// </summary>
[StructLayout(LayoutKind.Explicit, Size = 2)]
public struct PixelDataRgb565 : INonIndexedPixel
{
// raw component values
[FieldOffset(0)] private Byte blue; // 00 - 04
[FieldOffset(0)] private UInt16 green; // 05 - 10
[FieldOffset(2)] private Byte red; // 11 - 15
// raw high-level values
[FieldOffset(0)] private UInt16 raw; // 00 - 15
// processed component values
public Int32 Alpha { get { return 0xFF; } }
public Int32 Red { get { return (red >> 3) & 0xF; } }
public Int32 Green { get { return (green >> 5) & 0x1F; } }
public Int32 Blue { get { return blue & 0xF; } }
/// <summary>
/// See <see cref="INonIndexedPixel.Argb"/> for more details.
/// </summary>
public Int32 Argb
{
get { return Pixel.AlphaMask | raw; }
}
/// <summary>
/// See <see cref="INonIndexedPixel.GetColor"/> for more details.
/// </summary>
public Color GetColor()
{
return Color.FromArgb(Argb);
}
/// <summary>
/// See <see cref="INonIndexedPixel.SetColor"/> for more details.
/// </summary>
public void SetColor(Color color)
{
red = (Byte) (color.R >> 3);
green = (Byte) (color.G >> 2);
blue = (Byte) (color.B >> 3);
}
/// <summary>
/// See <see cref="INonIndexedPixel.Value"/> for more details.
/// </summary>
public UInt64 Value
{
get { return raw; }
set { raw = (UInt16) (value & 0xFFFF); }
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.