Exemple #1
0
        private static void PixelProcessor(int x, int y, ImageProcessingThreadContext context)
        {/*
          * var sourceColor = context.Original[x, y];
          * var chroma = sourceColor.CalculateChromaticity();
          * const float treshold = 0.1f;
          * var BackColor = Color.White;
          * var targetColor = chroma < treshold
          *     ? sourceColor.Lerp(BackColor, (treshold - chroma) / (1 - treshold))
          *     : BackColor;
          * context.Result[x, y] = targetColor;*/
            var sourceColor = context.Original[x, y];
            var chroma      = sourceColor.CalculateChromaticity();

            if (x == 0 || y == 0 || x == context.Original.Width - 1 || y == context.Original.Height - 1)
            {
                context.Result[x, y] = Color.FromArgb(0, Color.Black);
                return;
            }
            var br = (byte)(sourceColor.GetBrightness() * 255);

            if (chroma <= CHROMATICITY_MIN)
            {
                context.Result[x, y] = Color.FromArgb(255 - br, br, br, br);
                return;
            }
            var k = 1.0f;

            if (chroma < CHROMATICITY_MAX)
            {
                k = (CHROMATICITY_MAX - chroma) / (CHROMATICITY_MAX - CHROMATICITY_MIN);
            }
            context.Result[x, y] = Color.FromArgb(255 - br, br, br, br).Lerp(Color.FromArgb(0, BackColor), k);
        }
Exemple #2
0
        public static void main(int x, int y, ImageProcessingThreadContext context)
        {
            var sourceColor = context.Original[x, y];
            var chroma      = sourceColor.CalculateChromaticity();

            if (x == 0 || y == 0 || x == context.Original.Width - 1 || y == context.Original.Height - 1)
            {
                context.Result[x, y] = Color.FromArgb(0, Color.Black);
                return;
            }
            if (chroma <= CHROMATICITY_MIN)
            {
                var br  = (float)sourceColor.GetBrightness();
                var cbr = (byte)(br * 255);
                context.Result[x, y] = Color.FromArgb(cbr, cbr, cbr);
                return;
            }
            var k = 1.0f;

            if (chroma < CHROMATICITY_MAX)
            {
                k = (CHROMATICITY_MAX - chroma) / (CHROMATICITY_MAX - CHROMATICITY_MIN);
            }
            var nb = new Color[3, 3];
            var nbc = new float[3, 3];
            var nbb = new float[3, 3];
            var cx = 0.0f; var cy = 0.0f;
            var bx = 0.0f; var by = 0.0f;

            for (var dx = -1; dx <= 1; ++dx)
            {
                for (var dy = -1; dy <= 1; ++dy)
                {
                    if (dx == 0 && dy == 0)
                    {
                        continue;
                    }
                    var clr = nb[dx + 1, dy + 1] = context.Original[x + dx, y + dy];
                    var chr = nbc[dx + 1, dy + 1] = clr.CalculateChromaticity();
                    var brs = nbb[dx + 1, dy + 1] = clr.GetBrightness();
                    var len = (float)System.Math.Sqrt(dx * dx + dy * dy);
                    cx += dx * chr / len;
                    cy += dy * chr / len;
                    bx += dx * brs / len;
                    by += dy * brs / len;
                }
            }
            cx /= 3;
            cy /= 3;
            bx /= 3;
            by /= 3;
            var t = ((1 - nbc[0, 1]) * nbb[0, 1] + (1 - nbc[2, 1]) * nbb[2, 1] + (1 - nbc[1, 0]) * nbb[1, 0] +
                     (1 - nbc[1, 2]) * nbb[1, 2]);
            var A = (byte)(t * (cx * bx + cy * by) * 255);

            context.Result[x, y] = Color.FromArgb(A, A, A, A);
            //context.Result[x, y] = Color.FromArgb((byte)((cx + 1) / 2), (byte)((cy + 1) / 2), (byte)((bx + 1) / 2), (byte)((by + 1) / 2));
            //context.Result[x, y] = context.Original[x + (int)cx, y + (int)cy].Lerp(BackColor, k);

            /*
             * cx = (256 + cx * 255 ) / 2;
             * cy = (256 + cy * 255 ) / 2;
             * context.Result[x, y] = Color.FromArgb(255, (byte)cx, (byte)cy, (int)(chroma * 255));*/
        }