Exemple #1
0
        public ColorF Transform(ColorTransformerContext context, ColorF color)
        {
            var r = (float)Math.Pow(color.R, _gammaR);
            var g = (float)Math.Pow(color.G, _gammaG);
            var b = (float)Math.Pow(color.B, _gammaB);

            return(ColorF.FromRgb(r, g, b));
        }
Exemple #2
0
        public ColorF GetAverageColor(Bitmap bitmap)
        {
            int bitmapWidth  = bitmap.Width;
            int bitmapHeight = bitmap.Height;

            int bytesPerPixel;

            PixelFormat pixelFormat = bitmap.PixelFormat;

            switch (pixelFormat)
            {
            case PixelFormat.Format24bppRgb:
                bytesPerPixel = 3;
                break;

            case PixelFormat.Format32bppRgb:
            case PixelFormat.Format32bppArgb:
                bytesPerPixel = 4;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var   i       = 0;
            ulong rValues = 0;
            ulong gValues = 0;
            ulong bValues = 0;

            BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmapWidth, bitmapHeight), ImageLockMode.ReadOnly, pixelFormat);

            int stride = bitmapData.Stride;

            unsafe
            {
                var data = (byte *)bitmapData.Scan0;

                for (var y = 0; y < bitmapHeight; y += 1 + _skipColumns)
                {
                    int lineIndex = y * stride;
                    for (var x = 0; x < bitmapWidth; x += 1 + _skipRows)
                    {
                        int pixelIndex = lineIndex + x * bytesPerPixel;
                        rValues += data[pixelIndex + 2];
                        gValues += data[pixelIndex + 1];
                        bValues += data[pixelIndex];

                        i++;
                    }
                }
            }

            bitmap.UnlockBits(bitmapData);

            return(ColorF.FromRgb(((float)rValues / i) / 255f, ((float)gValues / i) / 255f, ((float)bValues / i) / 255f));
        }
Exemple #3
0
        public ColorF Transform(ColorTransformerContext context, ColorF color)
        {
            float brightness = color.GetBrightness();

            if (brightness > (1f - _threshold))
            {
                return(ColorF.FromRgb(1f, 1f, 1f));
            }

            if (brightness < _threshold)
            {
                return(ColorF.FromRgb(0f, 0f, 0f));
            }

            return(color);
        }
Exemple #4
0
        public ColorF Transform(ColorTransformerContext context, ColorF color)
        {
            ColorF lastColor = context.PreviousOutputColor;

            float diffR = color.R - lastColor.R;
            float r     = lastColor.R;

            if (diffR > _hysteresis)
            {
                r += diffR - _hysteresis;
            }

            if (diffR < -_hysteresis)
            {
                r += diffR + _hysteresis;
            }


            float diffG = color.G - lastColor.G;
            float g     = lastColor.G;

            if (diffG > _hysteresis)
            {
                g += diffG - _hysteresis;
            }

            if (diffG < -_hysteresis)
            {
                g += diffG + _hysteresis;
            }


            float diffB = color.B - lastColor.B;
            float b     = lastColor.B;

            if (diffB > _hysteresis)
            {
                b += diffB - _hysteresis;
            }

            if (diffB < -_hysteresis)
            {
                b += diffB + _hysteresis;
            }

            return(ColorF.FromRgb(r, g, b));
        }
        public ColorF GetAverageColor(Bitmap bitmap)
        {
            _graphics.DrawImage(bitmap, new Rectangle(0, 0, _bitmapWidth, _bitmapHeight), 0, 0, bitmap.Width, bitmap.Height, GraphicsUnit.Pixel);

            var colors = new List <Color>();

            for (var y = 0; y < _bitmapHeight; y++)
            {
                for (var x = 0; x < _bitmapWidth; x++)
                {
                    colors.Add(_bitmap.GetPixel(x, y));
                }
            }

            var averageR = (float)colors.Average(x => x.R);
            var averageG = (float)colors.Average(x => x.G);
            var averageB = (float)colors.Average(x => x.B);

            return(ColorF.FromRgb(averageR / 255f, averageG / 255f, averageB / 255f));
        }
Exemple #6
0
 public ColorF Transform(ColorTransformerContext context, ColorF color)
 {
     return(ColorF.FromRgb(color.R * _factorR, color.G * _factorG, color.B * _factorB));
 }
Exemple #7
0
 public Material()
 {
     Ambient = ColorF.FromRgb(0x080808);
     Diffuse = ColorF.FromRgb(0xFFFFFF);
 }