Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }