public YUVToRGBLookup(PixelFormat format, LuminanceScale scale)
{
_format = format;
_scale = scale;
var r_2_pix_alloc = 0 * 768;
var g_2_pix_alloc = 1 * 768;
var b_2_pix_alloc = 2 * 768;
if (scale == LuminanceScale.ScaleFull)
{
// Set up entries 0-255 in rgb-to-pixel value tables.
for (int i = 0; i < 256; i++)
{
_rgbToPix[r_2_pix_alloc + i + 256] = ColorHelper.RGBToColor((byte)i, 0, 0);
_rgbToPix[g_2_pix_alloc + i + 256] = ColorHelper.RGBToColor(0, (byte)i, 0);
_rgbToPix[b_2_pix_alloc + i + 256] = ColorHelper.RGBToColor(0, 0, (byte)i);
}
// Spread out the values we have to the rest of the array so that we do
// not need to check for overflow.
for (int i = 0; i < 256; i++)
{
_rgbToPix[r_2_pix_alloc + i] = _rgbToPix[r_2_pix_alloc + 256];
_rgbToPix[r_2_pix_alloc + i + 512] = _rgbToPix[r_2_pix_alloc + 511];
_rgbToPix[g_2_pix_alloc + i] = _rgbToPix[g_2_pix_alloc + 256];
_rgbToPix[g_2_pix_alloc + i + 512] = _rgbToPix[g_2_pix_alloc + 511];
_rgbToPix[b_2_pix_alloc + i] = _rgbToPix[b_2_pix_alloc + 256];
_rgbToPix[b_2_pix_alloc + i + 512] = _rgbToPix[b_2_pix_alloc + 511];
}
}
else {
// Set up entries 16-235 in rgb-to-pixel value tables
for (int i = 16; i < 236; i++)
{
byte scaledValue = (byte)((i - 16) * 255 / 219);
_rgbToPix[r_2_pix_alloc + i + 256] = ColorHelper.RGBToColor(scaledValue, 0, 0);
_rgbToPix[g_2_pix_alloc + i + 256] = ColorHelper.RGBToColor(0, scaledValue, 0);
_rgbToPix[b_2_pix_alloc + i + 256] = ColorHelper.RGBToColor(0, 0, scaledValue);
}
// Spread out the values we have to the rest of the array so that we do
// not need to check for overflow. We have to do it here in two steps.
for (int i = 0; i < 256 + 16; i++)
{
_rgbToPix[r_2_pix_alloc + i] = _rgbToPix[r_2_pix_alloc + 256 + 16];
_rgbToPix[g_2_pix_alloc + i] = _rgbToPix[g_2_pix_alloc + 256 + 16];
_rgbToPix[b_2_pix_alloc + i] = _rgbToPix[b_2_pix_alloc + 256 + 16];
}
for (int i = 256 + 236; i < 768; i++)
{
_rgbToPix[r_2_pix_alloc + i] = _rgbToPix[r_2_pix_alloc + 256 + 236 - 1];
_rgbToPix[g_2_pix_alloc + i] = _rgbToPix[g_2_pix_alloc + 256 + 236 - 1];
_rgbToPix[b_2_pix_alloc + i] = _rgbToPix[b_2_pix_alloc + 256 + 236 - 1];
}
}
}