コード例 #1
0
        private (double redGain, double greenGain, double blueGain) YCbCr(Surface src)
        {
            var maxY             = 0.0;
            var redAccumulator   = 0.0;
            var greenAccumulator = 0.0;
            var blueAccumulator  = 0.0;

            for (var x = 0; x < src.Width; x++)
            {
                for (var y = 0; y < src.Height; y++)
                {
                    var rgbColor   = src[x, y];
                    var ycbcrColor = YCbCrColor.FromRgb(rgbColor);
                    maxY              = Math.Max(maxY, ycbcrColor.Y);
                    redAccumulator   += rgbColor.R;
                    greenAccumulator += rgbColor.G;
                    blueAccumulator  += rgbColor.B;
                }
            }

            var pixelCount   = src.Width * src.Height;
            var redAverage   = redAccumulator / pixelCount;
            var greenAverage = greenAccumulator / pixelCount;
            var blueAverage  = blueAccumulator / pixelCount;

            return(maxY / redAverage, maxY / greenAverage, maxY / blueAverage);
        }
コード例 #2
0
        private void Render(Surface dst, Surface src, Rectangle rect)
        {
            for (int x = rect.Left; x < rect.Right; x++)
            {
                for (int y = rect.Top; y < rect.Bottom; y++)
                {
                    if (src.IsVisible(x, y))
                    {
                        YCbCrColor color = YCbCrColor.FromRgb(src[x, y]);

                        color.Cb = _selectedColor.Cb;
                        color.Cr = _selectedColor.Cr;

                        dst[x, y] = color.ToRgb();
                    }
                }
            }
        }
コード例 #3
0
        private static YCbCrColor[][] ToYCbCr(Surface source)
        {
            YCbCrColor[][] picture = new YCbCrColor[source.Width][];

            for (int x = 0; x < picture.Length; x++)
            {
                picture[x] = new YCbCrColor[source.Height];
            }

            for (int x = 0; x < picture.Length; x++)
            {
                for (int y = 0; y < picture[x].Length; y++)
                {
                    picture[x][y] = YCbCrColor.FromRgb(source[x, y]);
                }
            }

            return(picture);
        }
コード例 #4
0
        /// <summary>
        /// Sets global effect parameters.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <param name="dstArgs">The destination picture arguments.</param>
        /// <param name="srcArgs">The source picture arguments.</param>
        protected override void OnSetRenderInfo(PropertyBasedEffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs)
        {
            int color = parameters.GetProperty <Int32Property>("Color").Value;

            _selectedColor = YCbCrColor.FromRgb(ColorBgra.FromUInt32((UInt32)color));
        }