public void GenerateHSLRoundtripCharts() { var pixelFormat = PixelFormat.Format24bppRgb; Directory.CreateDirectory("rgb_to_hsl"); for (var b = 0; b < 256; b++) { using (var bitmap = new Bitmap(256, 256, pixelFormat)) { var bits = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, pixelFormat); try { unsafe { void *pData = bits.Scan0.ToPointer(); byte *pRow = (byte *)pData; for (var g = 0; g < 256; g++) { BitmapRGB *pCol = (BitmapRGB *)pRow; for (var r = 0; r < 256; r++) { var rgb1 = new RGB((byte)r, (byte)g, (byte)b); var hsl = rgb1.ToHSL(); var rgb2 = hsl.ToRGB(); var rgb = new RGB(); #if HIGHLIGHT_ROUNDTRIP_DIFFERENCES rgb.R = (byte)(Abs(rgb1.R - rgb2.R)); rgb.G = (byte)(Abs(rgb1.G - rgb2.G)); rgb.B = (byte)(Abs(rgb1.B - rgb2.B)); #else rgb.R = (byte)Math.Abs(rgb1.R - rgb2.R); rgb.G = (byte)Math.Abs(rgb1.G - rgb2.G); rgb.B = (byte)Math.Abs(rgb1.B - rgb2.B); #endif pCol->R = rgb.R; pCol->G = rgb.G; pCol->B = rgb.B; pCol++; } pRow += bits.Stride; } } } finally { bitmap.UnlockBits(bits); } bitmap.Save($@"rgb_to_hsl\{b}.bmp", ImageFormat.Bmp); } } }
public void GenerateHSLCharts() { var pixelFormat = PixelFormat.Format24bppRgb; Directory.CreateDirectory("hsl"); for (var l = 0; l < 256; l++) { using (var bitmap = new Bitmap(360, 256, pixelFormat)) { var bits = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, pixelFormat); try { unsafe { void *pData = bits.Scan0.ToPointer(); byte *pRow = (byte *)pData; for (var s = 0; s < 256; s++) { BitmapRGB *pCol = (BitmapRGB *)pRow; for (var h = 0; h < 360; h++) { var hsl = new HSL((ushort)h, (byte)s, (byte)l); var rgb = hsl.ToRGB(); pCol->R = rgb.R; pCol->G = rgb.G; pCol->B = rgb.B; pCol++; } pRow += bits.Stride; } } } finally { bitmap.UnlockBits(bits); } bitmap.Save($@"hsl\{l}.bmp", ImageFormat.Bmp); } } }
public void GenerateRGBReferenceCharts() { var pixelFormat = PixelFormat.Format24bppRgb; Directory.CreateDirectory("rgb"); for (var b = 0; b < 256; b++) { using (var bitmap = new Bitmap(256, 256, pixelFormat)) { var bits = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, pixelFormat); try { unsafe { void *pData = bits.Scan0.ToPointer(); byte *pRow = (byte *)pData; for (var g = 0; g < 256; g++) { BitmapRGB *pCol = (BitmapRGB *)pRow; for (var r = 0; r < 256; r++) { pCol->R = (byte)r; pCol->G = (byte)g; pCol->B = (byte)b; pCol++; } pRow += bits.Stride; } } } finally { bitmap.UnlockBits(bits); } bitmap.Save($@"rgb\{b}.bmp", ImageFormat.Bmp); } } }